在准备好的语句中使用问号占位符时出现 MySQL 语法错误

2024-02-24

尝试了我能想到的一切,我已经将范围缩小到“?”占位符。

我尝试过替换“?”带有随机文本的占位符,一切都很好(当然除了它不断覆盖同一行)。

我得到的错误:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在 '?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? 附近使用的正确语法 关于重复密钥更新 第 2 行的产品

这是我的代码(我会提供更多,但除了这个错误之外,一切都运行良好,如果我删除“?”占位符,那么除了值不是动态的之外,所有代码都运行良好,但如果您怀疑问题出在其他地方,请询问):

    // Create MySQL connection to ds_signifyd_api
    $mysqli = mysqli_connect( $db_server_name, $db_username, $db_password, $db_name );
    // Check connection
    if ($mysqli->connect_error) {
        exit( $mysqliFailedBody );
    }

    $mainProdQueryStmt = "INSERT INTO products (`product_id`, `title`, `body_html`, `vendor`, `product_type`, `created_at`, `handle`, `updated_at`, `published_at`, `template_suffix`, `published_scope`, `tags`) 
        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) 
        ON DUPLICATE KEY UPDATE 
            product_id = VALUES(product_id), 
            title = VALUES(title), 
            body_html = VALUES(body_html),
            vendor = VALUES(vendor), 
            product_type = VALUES(product_type), 
            created_at = VALUES(created_at), 
            handle = VALUES(handle), 
            updated_at = VALUES(updated_at), 
            published_at = VALUES(published_at), 
            template_suffix = VALUES(template_suffix), 
            published_scope = VALUES(published_scope), 
            tags = VALUES(tags)";

        $product_id = $product_title = $body_html = $vendor = $product_type = $created_at = $handle = $updated_at = $published_at = $template_suffix = $published_scope = $tags = "";

        foreach ($dss_product_db_array as $product) {

            $product_id = $product['id'];
            //... more variables here...
            $tags = mysqli_real_escape_string($mysqli, $tags);              

            if (!mysqli_query($mysqli, $mainProdQueryStmt)) {
                printf("Errormessage: %s\n", mysqli_error($mysqli));
            }

            $mainProdQuery->bind_param("isssssssssss", $product_id, $product_title, $body_html, $vendor, $product_type, $created_at, 
                $handle, $updated_at, $published_at, $template_suffix, $published_scope, $tags);
            $mainProdQuery->execute();
    //      $mainProdQuery->close();
       }

UPDATE

实施了此处提到的修复: 1.停止使用mysqli_real_escape_string2. 循环外绑定变量 3. 只使用面向对象的方法,而不是像下面那样混合使用它们mysqli_query($mysqli, $mainProdQueryStmt) VS $mysqli->prepare($mainProdQueryStmt)正如它应该的那样——这解决了“?”错误报告占位符语法错误

现在一切正常,没有错误。

更新的代码:

    $mainProdQueryStmt = "INSERT INTO dss_products (`product_id`, `title`, `body_html`, `vendor`, `product_type`, `created_at`, `handle`, `updated_at`, `published_at`, `template_suffix`, `published_scope`, `tags`) 
        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) 
        ON DUPLICATE KEY UPDATE 
            product_id = VALUES(product_id), 
            title = VALUES(title), 
            body_html = VALUES(body_html),
            vendor = VALUES(vendor), 
            product_type = VALUES(product_type), 
            created_at = VALUES(created_at), 
            handle = VALUES(handle), 
            updated_at = VALUES(updated_at), 
            published_at = VALUES(published_at), 
            template_suffix = VALUES(template_suffix), 
            published_scope = VALUES(published_scope), 
            tags = VALUES(tags)";

    $mainProdQuery = $mysqli->prepare($mainProdQueryStmt);
    if ($mainProdQuery === FALSE) {
        die($mysqli->error);
    }

    $product_id = $product_title = $body_html = $vendor = $product_type = $created_at = $handle = $updated_at = $published_at = $template_suffix = $published_scope = $tags = "";
    $mainProdQuery->bind_param("isssssssssss", $product_id, $product_title, $body_html, $vendor, $product_type, $created_at, 
        $handle, $updated_at, $published_at, $template_suffix, $published_scope, $tags);

    if ($mainProdQuery) {

        foreach ($dss_product_db_array as $product) {

            $product_id = $product['id'];
            $product_title = $product['title'];
            $body_html = $product['body_html'];
            $vendor = $product['vendor'];
            $product_type = $product['product_type'];
            $created_at = $product['created_at'];
            $handle = $product['handle'];
            $updated_at = $product['updated_at'];   
            $published_at = $product['published_at'];
            $template_suffix = $product['template_suffix'];
            $published_scope = $product['published_scope'];
            $tags = $product['tags'];

            if (!$mysqli->prepare($mainProdQueryStmt)) {
                printf("Errormessage: %s\n", $mysqli->error);
            }
            $mainProdQuery->execute();
        }
    }

当您使用占位符时,您必须使用mysqli_prepare(),你不能使用mysqli_query()。看起来您打算这样做,但不知何故代码丢失了,因为您使用了变量$mainProdQuery你从未分配过的。

您应该在循环外部准备查询并绑定参数一次。然后打电话execute()循环内。

$mainProdQueryStmt = "INSERT INTO products (`product_id`, `title`, `body_html`, `vendor`, `product_type`, `created_at`, `handle`, `updated_at`, `published_at`, `template_suffix`, `published_scope`, `tags`) 
    VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) 
    ON DUPLICATE KEY UPDATE 
        product_id = VALUES(product_id), 
        title = VALUES(title), 
        body_html = VALUES(body_html),
        vendor = VALUES(vendor), 
        product_type = VALUES(product_type), 
        created_at = VALUES(created_at), 
        handle = VALUES(handle), 
        updated_at = VALUES(updated_at), 
        published_at = VALUES(published_at), 
        template_suffix = VALUES(template_suffix), 
        published_scope = VALUES(published_scope), 
        tags = VALUES(tags)";
$mainProdQuery = $mysqli->prepare($mainProdQueryStmt);
$mainProdQuery->bind_param("isssssssssss", $product_id, $product_title, $body_html, $vendor, $product_type, $created_at, 
            $handle, $updated_at, $published_at, $template_suffix, $published_scope, $tags);
foreach ($dss_product_db_array as $product) {

    $product_id = $product['id'];
    //... more variables here...
    $mainProdQuery->execute();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在准备好的语句中使用问号占位符时出现 MySQL 语法错误 的相关文章

  • 更新重复密钥上的复合密钥 [重复]

    这个问题在这里已经有答案了 我需要更新新行 如果两者都满足 date dat and empId who 作为复合键 但如果其中之一或两者不同 则插入 sql INSERT INTO history SET endtimestamp now
  • 智能位置表单字段

    我的用户注册表单上有一个文本字段location 我本质上希望这个字段能够根据 Google 地图 或同等地图 进行验证 只允许有效位置通过 最好采用类似的格式滑铁卢 伦敦 or 伦敦 英国 要求 除了位置名称之外 我还想返回该位置中心的坐
  • PHP上传文件产生错误代码4。为什么?

    HTML
  • 使用 HTTP-Basic 身份验证发出 HTTP GET 请求

    我需要为我正在开发的 Flash Player 项目构建一个代理 我只需要使用 HTTP Basic 身份验证向另一个 URL 发出 HTTP GET 请求 并提供来自 PHP 的响应 就好像 PHP 文件是原始源一样 我怎样才能做到这一点
  • TCPDF/PHP 和字体:大写数字(血统数字?旧样式?)

    我得到了一种特殊的字体 上面有这样的数字 例如 正如您在 3 上看到的 一些数字下降到基线以下 我想要实现的是 这些数字不会低于该线 并且看起来像这样 在 Word 中 可以在相同字体的字符设置中轻松设置 如何在 TCPDF 中呈现数字 我
  • Facebook 中用户的时区是如何编码的

    我需要检查用户的时区 但我找不到它的真正定义 参考API http developers facebook com docs reference api user says 用户的时区与 UTC 的偏移量 现在在维基百科上这些是可能的时区
  • 访客客户检查 Woocommerce 订单账单电子邮件时可享受首单折扣

    通过对照正在处理和已完成的订单检查来宾客户的电子邮件地址 如果电子邮件没有订单 我想给来宾 首单折扣 如果这能在客人输入电子邮件时发生 那就太好了 我想我已经成功制作了折扣代码 现在我请求帮助合并这两个代码 使其一切正常 这是折扣代码 ad
  • 有什么方法可以在不重新加载的情况下更改标头 URL? [复制]

    这个问题在这里已经有答案了 可能的重复 修改URL而不重新加载页面 https stackoverflow com questions 824349 modify the url without reloading the page 使用新
  • Laravel Group By 和 Order By 不起作用

    我尝试制作一个Laravel 5 8项目 项目中的数据是这样的 id purch name prcvalue 1 10234 Nabila 100 2 10234 Nadeera 450 3 10234 Nabila 540 4 10234
  • 如何在 PHP 数组中的另一个已知(通过键或指针)元素之后有效地插入元素?

    给定一个数组 a array abc 123 k1 gt v1 k2 gt v2 78 tt k3 gt v3 当其内部指针指向其元素之一时 如何在当前元素之后插入元素 如何在键已知元素 例如 k1 之后插入元素 表现护理 您可以通过使用拆
  • 我可以在一个查询中更新/选择表吗?

    我需要在查看页面时选择数据并更新 视图 列 有没有一种方法可以在一个查询中执行此操作 或者我是否必须使用不同的查询 如果您不想 不需要使用事务 则可以创建一个存储过程 该过程首先更新视图计数 然后选择值并将其返回给用户
  • PHP mkdir() 和 fopen() 不起作用 - 权限问题? umask问题?

    以下 PHP 脚本无法创建目录 它也将无法创建文件 当目录已经存在时 ini set error reporting E ALL define ABSPATH SERVER DOCUMENT ROOT echo ABSPATH br br
  • Twig:选择某些块并渲染它们

    我正在将 twig 模板引擎集成到 PHP 应用程序中 特别是 我想使用 twig 引擎来渲染表单 了解了 symfony2 如何使用 twig 渲染表单小部件后 他们有一个巨大的模板文件 其中包含所有小部件 如下所示 block pass
  • 如何在Sequelize中从主模型同一级别的包含模型返回结果?

    这是我在项目中完成的代码和结果 我想获得包含模型的结果与主模型相同的结果 下面的代码是我所做的 序列化查询 User findAll include model Position attributes POSITION NAME then
  • PHP 日志文件颜色

    我正在编写一个 PHP 日志文件类 但我想为写入文件的行添加颜色 我遇到的问题是颜色也会改变终端的颜色 我想要实现的是仅更改写入日志文件的行的颜色 class logClass extends Singleton private funct
  • 图像创建从jpeg() PHP

    我正在使用 imagecreatefromjpeg 函数合并两张图片 现在我面临的问题是 当我使用服务器中的图片时 它工作正常 而当我使用其他网站的图片时 它不起作用 例如 当我使用这个 PHP 文件时http coolfbapps in
  • PHP 文件服务脚本:下载不可靠?

    这篇文章最初是关于 ServerFault 的一个问题 https serverfault com questions 131156 user receiving partial downloads https serverfault co
  • 让 Prometheus 发送 SQL 查询

    我正在尝试使用普罗米修斯 https prometheus io 监视我的 MySQL 数据库 但似乎找不到添加 SQL 查询的区域 例如 我想运行一个返回值的 SQL 查询 然后将该值添加到图表中 发送警报 有没有办法让 Promethe
  • SQL:查找每个跑步者跑步之间的平均天数

    因此 如果我们给出下表 runner ran Carol 2011 02 01 Alice 2011 02 01 Bob 2011 02 01 Carol 2011 02 02 Bob 2011 02 02 Bob 2011 02 03 B
  • 如何获取 URL 中未知的 $_GET 值的数组?

    我正在使用一个在线购物车 它接受订购的商品并通过 URL 将其唯一 ID 传递到 process php 页面 所以 URL 看起来像这样 process php code 1 231 code 2 532 code 3 342 Anoth

随机推荐

  • ruby中使用数组进行数据库查询

    我正在尝试查找数组中具有值的所有行 这是我的代码 require sqlite3 db SQLite3 Database new test sqlite res db query SELECT w1 synsetid FROM words
  • 左、中、右对齐同一行底部的 div

    我想在同一行显示三个 div 这三个都有不同的宽度和高度 并且它们不是直文本 我想左对齐一个 一直到左边 右对齐另一个 一直到右边 然后将第三个居中 在包含 div 的中间 在本例中是整个页面 此外 我希望这三个 div 与包含的 div
  • 修复错误mysql服务器已经消失[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我的 VPS 经常出现故障 MySQL 服务器已消失 错误 2006 并失去连接 我增加了 my cnf 中变量的值 但情况没有改善 这是我的 cnf
  • 静默 /dev/tcp/host/port 重定向错误

    以下脚本将测试从 8079 到 8081 的 tcp 端口是否打开或关闭 for port in 8079 8081 do echo gt dev tcp 127 0 0 1 port echo port port is open echo
  • 对齐双轴刻度时出现问题

    我创建了一个有 2 个 y 轴的 matplotlib 图 y 轴有不同的比例 但我希望刻度线和网格对齐 我从 Excel 文件中提取数据 因此无法事先知道最大限制 creates double y axis ax2 ax1 twinx l
  • .netcore 应用程序 wwwroot 之外的静态文件

    我在用着https github com ebekker ACMESharp https github com ebekker ACMESharp在我的 home 网络服务器上使用 SSL 它是免费的 O 这是相当手动的 但注意到在维基上它
  • bmp宽高比问题

    我一直在尝试了解 bmp 文件的工作原理 以便我可以渲染一些 Mandelbrot 设置图片并将它们输出为 bmp 文件 因为这似乎是最简单的方法之一 但由于某种原因 当我使用不是 1 的纵横比时 1 尽管它是 4 的幂 所以不需要填充 我
  • 创建纯 HTML 的自定义 ExtJS 的最佳方法

    所以我需要创建一个ExtJS组件 版本2 3 0 该组件只是简单的 HTML 样式化 它是一个标题 我当前的方法是创建一个自定义组件 如下所示 A ExtJS component for a header for the applicati
  • 获取设备的 IMEI 代码或/和 Mac 地址

    我正在实施一种唯一标识设备的方法 建筑师向我发送了以下规格 带 Wifi 3G 的设备 IMEI 代码 设备 仅 Wifi MacAddress 两者还需要制造商 型号来完成 ID 我的问题是 如何从设备获取 IMEI 如何从设备获取制造商
  • 仅当导出的符号存在于 insmod 的 Linux 内核模块中时,如何选择性地使用它们?

    我正在修改 Linux 内核以向 Linux 虚拟服务器 LVS 添加一些功能 我开发了一个模块 我称之为net netfilter ipvs ip vs utils c 以及负载平衡时要使用的一些函数 这里的所有函数都是使用导出的EXPO
  • Visual Studio 2012 ExtJS 智能感知

    有没有办法在 Visual Studio 2012 中获取 ExtJS intelliSense 这与新的 JavaScript 支持相结合将使我的 ExtJS 项目更容易编码 在 js 文件中添加 ext all 的引用路径将提供支持 具
  • 如何将网站IE浏览器自动重定向到Chrome浏览器?

    最近 我们迁移到最新版本的应用程序 允许用户在任何浏览器中打开应用程序 早期它仅支持 IE 浏览器 迁移后 许多用户仍然在旧浏览器中打开应用程序 由于应用程序在 IE 浏览器中速度非常慢 我们正在寻找一种解决方案 当用户在 IE 浏览器中打
  • viewDidLoad (AdMob) 上的 Swift 插页式广告

    我正在关注这个tutorial http www ios blog co uk tutorials swift display ads in your application with google admob 到目前为止 当我单击按钮时
  • 使用 CMake 构建 Windows DllMain DLL

    我有一个类似的问题this one https stackoverflow com questions 29490489 create a windows shared library with dllmain function mingw
  • Selenium 中

    我正在努力从 grailed com 上删除所有 Air Jordan 数据 https www grailed com designers jordan brand hi top sneakers https www grailed co
  • java比较器,如何按整数排序?

    我试图学习java中的比较器 我在网上找到了这个很好的例子 我的问题是如何更改这段代码 以便宠物名按年龄和降序排列 以便最老的在第一个 最小的在最后 class Dog implements Comparator
  • 如何在 C++ 中声明指向常量的指针?

    我正在尝试编写一个函数来解析命令行参数 这是函数声明 void parse int char const 以防万一 我也尝试过 const char const char and cchar 用一个typedef const char cc
  • JavaMail 可与 JBOSS Application Server 7 配合使用,但无法与 OpenShift 上的 Tomcat7 配合使用

    package com example web import java io import java util import javax servlet import javax servlet annotation WebServlet
  • 如何制作可编辑的 GridView 模板单元格文本框?

    如何制作可编辑的 GridView 模板单元格文本框 使用命令列并设置ShowEditButton True EditText Edit ButtonType Link 在模板列中 使用 ItemTemplate 来描述列在非编辑模式下的外
  • 在准备好的语句中使用问号占位符时出现 MySQL 语法错误

    尝试了我能想到的一切 我已经将范围缩小到 占位符 我尝试过替换 带有随机文本的占位符 一切都很好 当然除了它不断覆盖同一行 我得到的错误 您的 SQL 语法有错误 检查与您的 MySQL 服务器版本相对应的手册 了解在 附近使用的正确语法