Я использую сценарий резервного копирования базы данных SQL, в части кода, который я имею:
if (!isset($table_select))
{
$result = $dbc->prepare("show tables");
$i=0;
$table="";
$tables = $dbc->executeGetRows($result);
foreach ($tables as $table_array)
{
list(,$table) = each($table_array);
$exclude_this_table = isset($table_exclude)? in_array($table,$table_exclude) : false;
if(!$exclude_this_table) $table_select[$i]=$table;
$i++;
}
}
Я не знаю, как избавиться от этой части: list(,$table) = each($table_array);
Как each()
устарела, кто-нибудь знает решение?
Спасибо вам большое!
Поскольку вы не используете ключ, который each
обеспечивает, это не нужно в этом контексте.
Поскольку массивы передаются путем копирования, а не путем ссылки, вы можете использовать array_shift()
в качестве альтернативы, если вы не используете $table_array
снова в том же контексте.
foreach ($tables as $table_array) {
$table = array_shift($table_array);
var_dump($table);
}
Имейте в виду, что array_shift извлекает текущее значение и удаляет его из массива.
поскольку each()
извлекает текущую пару значений ключа и перемещает указатель на следующее значение, его можно заменить на current()
а также next()
,
foreach ($tables as $table_array) {
$table = current($table_array);
var_dump($table);
next($table_array);
}
Если вам нужно key
текущего значения при использовании current
а также next
ты можешь использовать key()
foreach ($tables as $table_array) {
$key = key($table_array);
$table = current($table_array);
var_dump($key, $table);
next($table_array);
}
Поскольку используемый сценарий автоматического резервного копирования использует PDO, Вы можете уменьшить сложность, используя fetchAll(PDO::FETCH_COLUMN);
вместо executeGetRows
Который будет извлекать плоский массив индексированного столбца 0, в отличие от пары ключ-значение столбца.
$result = $dbc->prepare("show tables");
$result->execute();
$i=0;
$table="";
$tables = $result->fetchAll(\PDO::FETCH_COLUMN);
foreach ($tables as $table) {
//...
}
Вы не хотите делать это в сценарии php. Я настоятельно рекомендую использовать cronjob для этой задачи, насколько это возможно для вас.
Вы можете создать cronjob, используя
crontab -e
И добавить что-то вроде:
0 1 * * * mysqldump -e --user=username --password='password' dbname | gzip | uuencode
sql_backup.gz | mail example@example.com
Приведенный выше пример запускает работу каждый день в 01:00.
Вы можете оформить заказ руководство Вот.
Надеюсь, это поможет! 🙂