【问题标题】:mysqli query inside foreach loop- syntax problemforeach 循环中的 mysqli 查询 - 语法问题
【发布时间】:2020-09-26 01:42:27
【问题描述】:

我有以下 mysqli 查询:

$conn = new mysqli("localhost", "xx", "xx", "xx");

foreach ($response as $class) {

    $sqle= "REPLACE INTO `items`
                    (`item_ids`)
                VALUES
                    ('{$class['id']}'";

    if ($conn->query($sqle) === TRUE) {
       //
    } else {
       echo "Problem";
    }
}

这是我的数据库表“items”:

item_ids  |  item_class  |  item_subclass
-------------------------------------------
          |       4       |        5

$response 是一个 API 数组,我从中获取 item_ids 的值。

我收到以下错误:

您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 第 4 行的 '' 附近

我不明白我的语法有什么问题?

如果我在 foreach 循环中 echo $class['id'](没有查询)我得到预期值。所以里面的查询有问题。

【问题讨论】:

  • 你测试过你的conn吗?看看你的参数是否正确?
  • 也似乎缺少代码。您似乎传递了一些示例中不存在的参数。 (Items_ids) 等
  • 连接正常,我已经检查过了。我将编辑我的问题以使其更清楚。
  • var_dump $sqle 会发生什么?
  • 我已将它放在 foreach 循环之外,我希望这是对的。现在出现此错误:string(108) "REPLACE INTO items` (item_ids) VALUES ('84444'" 您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以获取在 '' 附近使用的正确语法第 4 行`

标签: php mysql mysqli


【解决方案1】:

您的 SQL 查询缺少右括号。

$sqle= "REPLACE INTO `items`
                    (`item_ids`)
                VALUES
                    ('{$class['id']}'";

应该是:

$sqle= "REPLACE INTO `items`
                    (`item_ids`)
                VALUES
                    ('{$class['id']}')";
                                     ^ here

您应该学习使用查询参数。这样就更容易发现此类标点错误,而不会在视觉上与所有不同的引号和花括号混淆。

prepare()这个查询:

$sqle= "REPLACE INTO `items`
                    (`item_ids`)
                VALUES
                    (?)";

然后绑定参数,然后执行。

参数化查询使编写代码更容易而不会出错。

【讨论】:

    猜你喜欢
    • 2017-07-22
    • 1970-01-01
    • 2013-07-01
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多