php - SQL 语句中的 bindValue() 抛出异常
问题描述
我正在尝试将值绑定到此 SQL 语句:
$sQuery = $db->prepare('SELECT * FROM products WHERE name = "Hello" AND category = :sCategory AND material = 3 AND size = 20');
$sQuery->bindValue(':sName', $_POST["txtName"]);
$sQuery->bindValue(':sCategory', 5);
$sQuery->bindValue(':sMaterial', $_POST["txtMaterial"]);
$sQuery->bindValue(':sSize', $_POST["txtSize"]);
$sQuery->execute();
$aOrders = $sQuery->fetchAll();
但是当我使用占位符(此代码中的:sCategory)时,它会不断抛出异常。如果我只是将 5 直接放在语句中,它就会运行,但如果我这样做则不会。谁能帮我弄清楚为什么会这样?
解决方案
$sQuery = $db->prepare('SELECT * FROM products WHERE name = :sName AND category = :sCategory AND material = :sMaterial AND size = :sSize');
$sQuery->bindValue(':sName', $_POST["txtName"]);
$sQuery->bindValue(':sCategory', 5);
$sQuery->bindValue(':sMaterial', $_POST["txtMaterial"]);
$sQuery->bindValue(':sSize', $_POST["txtSize"]);
$sQuery->execute();
$aOrders = $sQuery->fetchAll();
我了解您说您一次测试每个 bindValue 。但为了做到这一点,您必须删除 bindValue。要“测试”,试试这个:
$sQuery = $db->prepare('SELECT * FROM products WHERE name = "Hello" AND category = :sCategory AND material = 3 AND size = 20');
$sQuery->bindValue(':sCategory', 5);
$sQuery->execute();
$aOrders = $sQuery->fetchAll();
推荐阅读
- html - 使用 XPath 从网站中抓取伪元素
- angular - 将 Angular Material Progress 条链接到 Observable 值
- ruby-on-rails - 应用程序无法在 heroku 上加载,无法破译 heroku 日志来判断错误是什么
- html - CSS3 使用 :before, :after 来制作嵌入和开始的阴影
- slider - 带 2 个输入的基础范围滑块?
- jenkins - Jenkins:管道上游触发器在多分支项目中停止工作
- google-analytics - 用过滤器替换请求 URI 的开头
- hive - 如何在 Hive 中基于日期值创建标志
- c# - C# Windows 窗体 WebBrowser jquery 和引导程序
- java - 如何使用 HandlerInterceptorAdapter 在 HttpServletRequest 方法中修改请求正文