2016-06-21 13 views
1

列が存在する場合、テーブルの列をすべての行の文字列に設定しようとしています。しかし、私は、SQL構文エラーを受け付けておりますし、正確に何の問題がある特定することはできません。私はそれは非常に小さいが、私に何かでなければなりません知っているPHPでのSQLの構文エラー

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

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 
    } 
} 

私は戻って受け取る構文エラーしばらく詰まっていて、私の誤りを見つけることができない。

+2

'始まる/ end'は、ストアドプロシージャではなく、一般的な' SELECT'クエリでのみ有効です。あなたがしようとしていることは、 '選択する 'ことはできません。 selectは、テーブルのデータOUTのみをプルします。表の内容または他の表を変更することはできません。 'update ... join'が必要ですし、それでもselectから取り出されたものだけでなく、特定のフィールドだけをターゲットにすることができます。 –

+0

私は 'UPDATE ...'セクションをどこに置くべきですか? – Jodo1992

+1

何をしていますか? –

答えて

2

はquery-

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の終わりに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構文に誤りがあります。 'IF EXISTS(1行目のINFORMATION_SCHEMA.COLUMNSからのDISTINCT情報の選択' – Jodo1992

+0

)の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルをチェックしてください。通常のクエリでこの条件を使用することはできません。それをストア手順として使用します。 –