我寫迭代的PHP文件通過我的所有服務器上的數據庫,並取代條目的整列(或兩個)四****
保護敏感信息的迭代。不過,我有下面的代碼在SQL語法返回一個解析錯誤,我現在用:語法錯誤在SQL查詢,同時通過數據庫
<?php
/**
* This replaces an entire column within a table with a 4 asterisk long string
*/
$host = 'example.example.com';
$user = 'example';
$password = 'password';
$connection = new mysqli($host, $user, $password);
if (!$connection){
die ('Could not connect to server: '.mysqli_error($connection));
}
// Get the databases as an array
$res = mysqli_query($connection, "SHOW DATABASES");
$d = mysqli_fetch_array($res);
// Loop through the array of databases
for ($i = 0; $i < count($d); $i++){
$db = $d[$i];
echo "$db\n";
// To skip the first database information_schema
if ($i > 0){
$sql1 = /** @lang text */
"USE $db";
$query1 = mysqli_query($connection, $sql1);
if (!$query1){
die('Could not select database: '.mysqli_error($connection));
}
$sql2 = /** @lang text */
"SELECT * FROM `info`";
$query2 = mysqli_query($connection, $sql2);
if (!$query2){
die('Could not select from `info`: '.mysqli_error($connection));
}
while ($row = mysqli_fetch_array($query2)){
$id = $row['id'];
$sql3 = /** @lang text */
"IF COL_LENGTH('info','borrower') IS NOT NULL
BEGIN
UPDATE `info`
SET `borrower` = '****'
WHERE `id` = '$id'
END";
$query3 = mysqli_query($connection, $sql3);
if (!$query3){
die('Could not replace number with "****" '.mysqli_error($connection));
}
$sql4 = /** @lang text */
"IF COL_LENGTH('info','coborrower') IS NOT NULL
BEGIN
UPDATE `info`
SET `coborrower` = '****'
WHERE `id` = '$id'
END";
$query4 = mysqli_query($connection, $sql4);
if (!$query4){
die('Could not replace number with "****" '.mysqli_error($connection));
}
}
}
mysqli_close($connection);
?>
這是錯誤消息我收到回:
INFORMATION_SCHEMA
無法選擇數據庫:你的SQL語法有錯誤;檢查對應於你的MySQL服務器版本的在線使用近「」正確的語法手冊1
我覺得這個錯誤發生,因爲當我通過我的數據庫循環作爲一個數組,由於某種原因,之後的條目是空白的。不完全確定這是爲什麼。當我在Sequel Pro中嘗試SHOW DATABASES;
查詢時,它會返回正確的數據庫列表。這是列表的例子:
- INFORMATION_SCHEMA
- MySQL的
- performance_schema
- DB1
- DB2
- DB3
- 等....
我PHP解釋器和MySQL服務器版本sion都是5.6
您對'mysqli_fetch_array()'的單個調用只返回第一行。你應該把這個像一個正常的查詢和調用'mysqli_fetch_array()''一環while'而不是用'計數的'for'循環內()'。 –
你的意思'而($ d = mysqli_fetch_array($水庫))'? – Jodo1992
是,然後'$分貝= $ d [ '數據庫'];'因爲'SHOW DATABASES'查詢返回稱爲'Database'單個列。它的行爲與普通的'SELECT'語句相同,返回1列和N行。 –