【问题标题】:Syntax error with SQL in PHPPHP中的SQL语法错误
【发布时间】:2016-10-23 08:18:39
【问题描述】:

如果该列存在,我正在尝试将表的列设置为每行中的字符串。但是,我收到 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
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 5 行的 ')
BEGIN
UPDATE info
SET borrower = '****'
' 附近使用正确的语法

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

【问题讨论】:

  • begin/end 仅在存储过程中有效,在一般的 select 查询中无效。在select 中,您尝试做的事情是不可能的。 select 仅将数据拉出表。它不能更改表格或任何其他表格的内容。你需要update ... join,即便如此,它也只能针对特定字段,而不是从选择中提取的任意字段。
  • 那么我应该把我的UPDATE ... 部分放在哪里?
  • 你在那里做什么?查询数据库架构并将其放入表中 - 这看起来非常错误
  • 您标记了 MySQL 和 SQL-Server,但您的错误和代码表明它是 MySQL。如果是 SQL-Server,你可以去掉第一个 SELECT 语句,我相信它会起作用。
  • @MarcB BEGIN/END 是有效的,因为它与 OP 的 IF 语句有关,不是吗?我认为问题在于SELECT IF(etc... 无效。删除第一个SELECT,如果满足条件,您只剩下一个运行UPDATE 的IF 语句。

标签: php mysql syntax-error


【解决方案1】:

试试这个语法的查询-

 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 到。你想选择什么?它只是更新子句。

更新

来自here的示例

您不能像普通查询一样使用它。控制结构,如 IF 或 WHILE 只允许在存储过程或函数中使用。

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?

【讨论】:

  • 这样我得到一个不同的语法错误: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 'IF EXISTS (SELECT DISTINCT info FROM INFORMATION_SCHEMA.COLUMNS' at line 1
  • 你不能在常规查询中使用这个 if 条件,你需要将它用作存储过程。
猜你喜欢
  • 2018-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-21
相关资源
最近更新 更多