变量数量不匹配 - 准备好的语句

时间:2014-11-24 20:02:55

标签: php mysqli

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,它会发出一个错误,说&#34;变量的数量与预备语句中的参数数量不匹配&#34;。

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

这很混乱因为有两个??我绑定两个字符串作为参数。不太了解发生了什么。

1 个答案:

答案 0 :(得分:1)

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

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