下面的代碼工作並給出結果,但它不能正確顯示結果 如何修改$ search_output?
<?php
$search_output = "";
if (isset($_POST['searchquery']) && $_POST['searchquery'] != "") {
$searchquery = preg_replace('/[^a-zA-Z0-9_ %\[\]\/\.\(\)%&-]/s', '', $_POST['searchquery']);
if ($_POST['filter1'] == "Products") {
require_once ("storescripts/connect_to_mysqli.php");
//syntax error string not quoted properly
$stmt = $myConnection->prepare('SELECT * FROM products WHERE product_name LIKE ? OR details LIKE ? OR category LIKE ? OR subcategory LIKE ? OR price LIKE ?');
$param = "%$searchquery%";
$stmt->bind_param('sssss', $param , $param , $param , $param , $param);
$stmt->execute();
$stmt->bind_result($id, $product_name, $price);
while ($stmt->fetch()) {
printf("%s %s %s\n", $id, $product_name, $price);
$search_output .= "
<li><div class='product'>
<a href='product.php?id=$id' class='info'>
<span class='holder'>
<img src='inventory_images/$id.jpg' alt='$product_name' />
<span class='book-name'>$product_name</span>
</a>
<a href='product.php?id=$id' class='buy-btn'>RM<span class='price'>$price</span></a>
</div>
</li>
";
}//While loop was not closed
} else {
$search_output = "<hr />0 results for <strong>$searchquery</strong><hr />";
}
}
?>
您有2個語法錯誤。 編輯以解決綁定語句和SQL改變
<?php
$search_output = "";
if (isset($_POST['searchquery']) && $_POST['searchquery'] != "") {
$searchquery = preg_replace('/[^a-zA-Z0-9_ %\[\]\/\.\(\)%&-]/s', '', $_POST['searchquery']);
if ($_POST['filter1'] == "Products") {
require_once ("storescripts/connect_to_mysqli.php");
//syntax error string not quoted properly
$stmt = $myConnection->prepare('SELECT * FROM products WHERE product_name LIKE ? OR details LIKE ? OR category LIKE ? OR subcategory LIKE ? OR price LIKE ?');
$param = "%$searchquery%";
$stmt->bind_param('sssss', $param , $param , $param , $param , $param);
$stmt->execute();
$stmt->bind_result($product_name, $price);
while ($stmt->fetch()) {
printf("%s %s\n", $product_name, $price, $totalpoints);
$search_output .= "
<li><div class='product'>
<a href='product.php?id=$id' class='info'>
<span class='holder'>
<img src='inventory_images/$id.jpg' alt='$product_name' />
<span class='book-name'>$product_name</span>
</a>
<a href='product.php?id=$id' class='buy-btn'>RM<span class='price'>$price</span></a>
</div>
</li>
";
}//While loop was not closed
} else {
$search_output = "<hr />0 results for <strong>$searchquery</strong><hr />";
}
}
?>
還需要綁定的所有5個參數更改以下行。
$stmt->bind_param('s', '%$searchquery%');
編輯:
$stmt->bind_result($product_name, $price);
應爲下列如果第三列總積分。這是不可能的,當你使用*
到select
$stmt->bind_result($product_name, $price, $totalpoints);
而且
printf("%s %s\n", $product_name, $price, $totalpoints);
可以
printf("%s %s %s\n", $product_name, $price, $totalpoints);
或只是
echo "$product_name $price $totalpoints\n";
知道列名在執行語句後獲得總體使用。
$count = $stmt->num_rows;
編輯2 檢查,如果這個工程增加數也。
$search_output = "";
if (isset($_POST['searchquery']) && $_POST['searchquery'] != "") {
$searchquery = preg_replace('/[^a-zA-Z0-9_ %\[\]\/\.\(\)%&-]/s', '', $_POST['searchquery']);
if ($_POST['filter1'] == "Products") {
require_once ("storescripts/connect_to_mysqli.php");
$stmt = $myConnection->prepare('SELECT id, product_name, price FROM products WHERE product_name LIKE ? OR details LIKE ? OR category LIKE ? OR subcategory LIKE ? OR price LIKE ?');
$param = "%$searchquery%";
$stmt->bind_param('sssss', $param, $param, $param, $param, $param);
$stmt->execute();
/* store result */
$stmt->store_result();
/* get the row count */
$count = $stmt->num_rows;
if ($count >= 1) {
$search_output = "<hr />$count results for <strong>$searchquery</strong><hr />";
$stmt->bind_result($id, $product_name, $price);
while ($stmt->fetch()) {
printf("%s %s %s\n", $id, $product_name, $price);
$search_output .= "
<li><div class='product'>
<a href='product.php?id=$id' class='info'>
<span class='holder'>
<img src='inventory_images/$id.jpg' alt='$product_name' />
<span class='book-name'>$product_name</span>
</a>
<a href='product.php?id=$id' class='buy-btn'>RM<span class='price'>$price</span></a>
</div>
</li>
";
}
} else {
$search_output = "<hr />0 results for <strong>$searchquery</strong><hr />";
}
} else {
$search_output = "<hr />0 results for <strong>$searchquery</strong><hr />";
}
}
看起來你需要正確地逃脫你的報價(或使用雙打)。 ''''''或'''「'另外,這應該是你首先應該谷歌的東西。我可以肯定地說,第一個SERP上的某個人詢問了你確切的問題。 –
這與數據庫代碼或預處理語句無關。這是錯誤的字符串。無論如何,佔位符並不屬於單引號。 – mario
請使用好的IDE /編輯器。使您的編碼更容易。 – bansi