2016-11-29 72 views
0

我使用事先准备好的声明,并执行mysqli_stmt :: bind_param():

$search = trim($_GET['s']); 
if($stmtgetproducts = $mysqli->prepare("SELECT s.store_id, product_id, product_name, product_desc, product_price, product_discount, product_views, product_date, product_code, product_category, product_image1, product_image2, sale_id,s.store_name,s.store_username 
    FROM store_products sp 
    INNER JOIN store_product_categories spc ON sp.product_category=spc.id 
    INNER JOIN store s ON sp.store_id=s.store_id WHERE MATCH(product_name, product_desc) AGAINST('?' IN BOOLEAN MODE);")){ 
$stmtgetproducts->bind_param("s",$search); 
$stmtgetproducts->execute(); 
$getproducts=$stmtgetproducts->get_result(); 
$stmtgetproducts->close(); 
} 
else 
{ 
echo $mysqli->error; 
} 

由于MySQL的PHP​​变量数不匹配的在准备好的声明参数号,我给它只是一个参数采取作为参数,并结合PARAM只是一个是$ SEARCH它给了我这个错误

mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement 

这一点,如果形式

<form action="" method="GET"> 
        Search Product: <input type="text" name="s" placeholder="Enter product name"> 
       </form> 

如果我改变了

$stmtgetproducts->bind_param("ss",$search); 

那么这个错误出现

mysqli_stmt::bind_param(): Number of elements in type definition string doesn't match number of bind variables 

回答

0
$stmtgetproducts = $mysqli->prepare("SELECT s.store_id, product_id, product_name, product_desc, product_price, product_discount, product_views, product_date, product_code, product_category, product_image1, product_image2, sale_id,s.store_name,s.store_username 
    FROM store_products sp 
    INNER JOIN store_product_categories spc ON sp.product_category=spc.id 
    INNER JOIN store s ON sp.store_id=s.store_id WHERE MATCH(product_name, product_desc) AGAINST(? IN BOOLEAN MODE);")) 

改变了我准备语句这个

+0

取下字符串的分号,我们要经常检查输入的参数不应该空,$搜索变量不会清空查询。这似乎确定,一切都是正确的。 –

相关问题