我非常担心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']; ?>
有人能指出我正确的方向吗?
答案 0 :(得分:1)
这个怎么样?
$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)
如果您让用户输入任何数据(在网站上的文本框中)或您从数据库中提取任何内容(二次注入的风险),请确保您清理它(清除任何讨厌的标签,如&lt;或&gt;)使用htmlspecialchars($category)
或htmlentities($category)
。
通过在代码中实现此方法,您将在SQL注入中相当安全:)
答案 1 :(得分:0)
尝试将此变量设为全局:将其放在脚本global $acousticDB;
的上半部分,否则您可以尝试此$acoustic='';