我在准备好的语句上经历了一些tutorials,我无法弄清楚如何循环包含多行的结果。我习惯了
的程序风格while($row = mysqli_fetch_array($result))
然而,我不能为我的生活弄清楚如何使用准备好的语句格式来做到这一点。
if($stmt = $mysqli->prepare("SELECT * FROM `Products` WHERE name LIKE '%?%'")){
$stmt->bind_param("s", $query); //query is $_GET['query'], user input
$stmt->execute();
$result = null;
$stmt->bind_result($result);
while($stmt->fetch()){ //problematic code...
echo $result;
}
$stmt->close();
}
如何循环遍历PHP中预准备语句SQL查询所产生的多行?
编辑(根据要求提供新代码):
/* Create a prepared statement */
if($stmt = $mysqli->prepare("SELECT name, price, description, file FROM `Products` WHERE name LIKE '%?%'")){
$stmt->bind_param("s", $query) or die('bind_param');
$query = trim(htmlspecialchars($_GET['query']));
$stmt->execute() or die('execute');
$stmt->bind_result($name, $price, $description, $file) or die('bind_result');
while($stmt->fetch()){
echo $name;
}
$stmt->close();
}
答案 0 :(得分:2)
你的问题不是暂时的,而是在LIKE中。你的SELECT应该是:
"SELECT * FROM `Products` WHERE name LIKE ?"
你的$ query变量:
$query = '%'.$_GET['query'].'%';
答案 1 :(得分:1)
替换此
if($stmt = $mysqli->prepare("SELECT * FROM `Products` WHERE name LIKE '%?%'")){
用这个
if($stmt = $mysqli->prepare("SELECT * FROM `Products` WHERE name LIKE ?")){
那么每件事都可以。)
原因是当你使用'%?%'时php不明白?喜欢需要参数