PHP 中 SQL 的语法错误

Syntax error with SQL in PHP

我正在尝试将 table 的列设置为每行中的一个字符串(如果该列存在)。但是,我收到 SQL 个语法错误,无法确定问题的确切原因:

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

我知道它一定是非常小的东西,但我已经卡了一段时间,似乎找不到我的错误。

尝试使用此语法查询-

 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 条件的末尾添加了 ThenEnd if 而不是仅 if,并且我删除了 select 到。你想 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?