变量数不匹配 - 预准备语句


Number of variables doesn't match - prepared statement

if (strlen($search) > 0)
{
    $query = "SELECT p.product_id,p.account_id,i.image_id,a.email,p.title,p.price,MATCH(p.title) AGAINST('?' IN BOOLEAN MODE) AS score
    FROM products AS p
    LEFT OUTER JOIN products_images AS i
    ON p.product_id = i.product_id AND i.featured=1 AND i.deleted=0
    INNER JOIN accounts AS a
    ON p.account_id = a.account_id 
    WHERE MATCH(p.title) AGAINST('?' IN BOOLEAN MODE)
    ORDER BY score DESC";
}
else
{
    $query = "SELECT p.product_id,p.account_id,i.image_id,a.email,p.title,p.price
    FROM products AS p
    LEFT OUTER JOIN products_images AS i
    ON p.product_id = i.product_id AND i.featured=1 AND i.deleted=0
    INNER JOIN accounts AS a
    ON p.account_id = a.account_id";    
}

//Search the listings
echo "<div class='"row'">";
if ($statement = $mysqli->prepare($query))
{
    if (strlen($search) > 0)
    {
        $statement->bind_param("ss", $search, $search);
    }
    $statement->execute();
}

这让我非常困惑,但是,如果提供了$search,它会吐出一个错误,指出"变量数与预准备语句中的参数数不匹配"。

没有$search的另一种情况工作正常。

这非常令人困惑,因为有两个??,我绑定两个字符串作为参数。真的不明白发生了什么。

这很令人困惑,但你可以试试:

if (strlen($search) > 0)
{
    $query = "SELECT p.product_id,p.account_id,i.image_id,a.email,p.title,p.price,MATCH(p.title) AGAINST('?' IN BOOLEAN MODE) AS score
    FROM products AS p
    LEFT OUTER JOIN products_images AS i
    ON p.product_id = i.product_id AND i.featured=1 AND i.deleted=0
    INNER JOIN accounts AS a
    ON p.account_id = a.account_id 
    WHERE MATCH(p.title) AGAINST(:ss IN BOOLEAN MODE)
    ORDER BY score DESC";
}
else
{
    $query = "SELECT p.product_id,p.account_id,i.image_id,a.email,p.title,p.price
    FROM products AS p
    LEFT OUTER JOIN products_images AS i
    ON p.product_id = i.product_id AND i.featured=1 AND i.deleted=0
    INNER JOIN accounts AS a
    ON p.account_id = a.account_id";    
}

//Search the listings
echo "<div class='"row'">";
if ($statement = $mysqli->prepare($query))
{
    if (strlen($search) > 0)
    {
        $statement->bind_param(':ss', $search);
    }
    $statement->execute();
}
相关文章: