我的代码在这里:
$array_letter = array("A","B","C","Ç","D","E","F","G","H","I","İ","J","K","L",
"M","N","O","P","R","S","Ş","T","U","Ü","V","Y","Z");
$sql = "SELECT id,city FROM city WHERE city LIKE '" .$array_letter[$i]."%'";
在这些代码之后:
for ($i=0;$i<27;$i++) {
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result)) {
echo "<h3>".$row['city']."</h3>";
}
}
$sql 毫无意义,因为 $array_letter[$i]
在那里不起作用。但$sql必须在这些代码的最上面进行设计。因为我编写了 switch-case 语句
。根据请求,$sql
将会改变,因此我无法在for循环下编写$sql
。但我所有的查询都取决于 $array_letter
。如何使 $array_letter
工作?
最佳答案
您应该使用mysqli
驱动程序和准备好的语句:
$st = $mysqli->prepare("SELECT id,city FROM city WHERE city LIKE ?'");
for ($i=0;$i<27;$i++) {
$st->bind_param("s", $array_letter[$i].'%');
$st->execute();
$result = $st->get_result();
while ($row = $result->fetch_assoc()) {
echo "<h3>".$row['city']."</h3>";
}
}
虽然对于这种情况,我建议只做一个大查询,因为看起来你已经得到了一切:SELECT id,city FROM city ORDER BY city
...
出于教育目的,另一种方法是执行以下操作:
$sql = "SELECT * FROM foo WHERE bar='%s'";
mysql_query(sprintf($sql, "42"));
这在其他情况下可能很有用,但同样,如果您正在编写 SQL,请使用准备好的语句,因为它们可以更优雅地解决此问题,并提供额外的保护,帮助防止 SQL 注入(inject)攻击并最大限度地减少解析服务器的 SQL 数量必须做的。
关于php - 如何将一个变量的值分配给之前的另一个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10665744/