首页 > 解决方案 > 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 直接放在语句中,它就会运行,但如果我这样做则不会。谁能帮我弄清楚为什么会这样?

标签: phpsqlpdo

解决方案


$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();

推荐阅读