2016-06-21 37 views
1

我試圖將列的列設置爲每行中的字符串(如果該列存在)。不過,我收到SQL語法錯誤,無法查明究竟是什麼的問題是:SQL中的語法錯誤PHP

while($db = mysqli_fetch_array(mysqli_query($conn, "SHOW DATABASES"))){ 
    $id = $db['id']; 

    $sql = /** @lang text */ 
      "SELECT IF(EXISTS(
        SELECT DISTINCT `info` 
         FROM INFORMATION_SCHEMA.COLUMNS 
         WHERE COLUMN_NAME IN ('borrower') 
          AND TABLE_SCHEMA = '$db')) 
        BEGIN 
         UPDATE `info` 
          SET `borrower` = '****' 
          WHERE `id` = '$id' 
        END"; 

    $query = mysqli_query($conn, $sql); 

    if (!$query){ 
     // Deal with error 
    } 
} 

的語法錯誤,我收到回:

information_schema
db1
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')
BEGIN
UPDATE info
SET borrower = '****'
' at line 5

我知道那一定是一件很渺小,但我已經卡住了一段時間,似乎無法找到我的錯誤。

+2

'開始/ end'只是在存儲過程中有效,而不是一般的'select'查詢。你想做的事情在'select'中是不可能的。選擇只拉取表中的數據OUT。它不能更改表格或任何其他表格的內容。你需要'更新...加入',即使如此,只能針對特定的領域,而不是從一個選擇拉的arginitary。 –

+0

那麼我應該在哪裏放置'UPDATE ...'部分? – Jodo1992

+1

你在那裏做什麼?查詢數據庫模式並將其轉化爲表 - 這看起來可怕極其錯誤 –

回答

2

試試這個語法的查詢 -

IF EXISTS (SELECT DISTINCT `info` 
        FROM INFORMATION_SCHEMA.COLUMNS 
        WHERE COLUMN_NAME IN ('borrower') 
         AND TABLE_SCHEMA = '$db')) THEN 
    UPDATE `info` 
         SET `borrower` = '****' 
         WHERE `id` = '$id' 


    END IF; 

我在if條件的結束和End if,而不是隻if添加Then,和我刪除了select來。你想要選擇什麼?它只是更新條款。

更新從here

you can't use it like a normal query. Control structures like IF or WHILE are only allowed in stored procedures or functions.

MYSQL面板

delimiter $$ 
create procedure YourIfConditionSP() 
begin 
    IF EXISTS (SELECT DISTINCT `info` 
        FROM INFORMATION_SCHEMA.COLUMNS 
        WHERE COLUMN_NAME IN ('borrower') 
         AND TABLE_SCHEMA = '$db') THEN 
    UPDATE `info` 
         SET `borrower` = '****' 
         WHERE `id` = '$id'; 


    END IF; 
end $$ 
delimiter ; 

例子,你必須改變你的PHP代碼調用存儲過程。

PHP

//run the stored procedure 
$result = mysqli_query($connection, 
     "CALL YourIfConditionSP") or die("Query fail: " . mysqli_error()); 

How to call a MySQL stored procedure from within PHP code?

+0

有了這個,我得到了一個不同的語法錯誤:'你的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以在'1 EXUST(在第1行'選擇DISTINCT信息來自INFORMATION_SCHEMA.COLUMNS'')使用正確的語法。 – Jodo1992

+0

如果在常規查詢中條件不成立,則需要用它作爲存儲過程。 –