如何使用 mysqli 为 select 查询准备语句

How to prepare statement with mysqli for select query

我很担心sql注射。我一直在阅读它并尝试准备以下查询:

$query_AcousticDB = "SELECT * FROM products WHERE Category = 'Acoustic ' ORDER BY RAND()";
$AcousticDB = mysqli_query($DB, $query_AcousticDB) or die(mysqli_connect_error());
$row_AcousticDB = mysqli_fetch_assoc($AcousticDB);
$totalRows_AcousticDB = mysqli_num_rows($AcousticDB);

效果很好。

我以为只需要改成下面的:

$query_AcousticDB = prepare("SELECT * FROM products WHERE Category = 'Acoustic ' ORDER BY RAND()");

但是这不起作用。我收到以下错误:Call to undefined function prepare()

我仍然希望得到我的值:<?php echo $row_AcousticDB['what ever']; ?>

有人能指出我正确的方向吗?

这个怎么样?

$category = "Acoustic";

$sql = "SELECT * FROM products WHERE Category = ? ORDER BY RAND()";
$stmt = $DB->prepare($sql);
$stmt->bind_param('s', $category);

$stmt->execute();
$row_AcousticDB = $stmt->get_result(); // altenative: $stmt->bind_result($row_AcousticDB);
$row_AcousticDB->fetch_array(MYSQLI_ASSOC)

如果您让用户输入任何数据(在网站的文本框中)或者您从数据库中提取任何内容以供使用(二阶注入的风险),请确保对其进行清理(清除任何讨厌的标签,如 <或 >) 通过使用 htmlspecialchars($category)htmlentities($category).

在您的代码中实施此方法后,您将相当安全地免受 SQL 注入 :)

尝试使这个变量成为全局变量:把它放在脚本的上半部分 global $acousticDB; 或者你可以试试这个 $acoustic='';