php - 如何将一个变量的值分配给之前的另一个变量?

标签 php mysql variables

我的代码在这里:

$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/

相关文章:

php - 如何设置 php 以便将数据插入数据库?

php - 格式未知时创建 PHP DateTime

php - 如何知道代码是否需要 eval()

php - WAMP - PHP/MySQL - 为什么我的 POST 调用被破坏

运行 sql DELETE 查询但不在数据库中执行的 php 命令

php - 如何检查 Opencart 3 中最后执行的查询

mysql - 使用空间查询的结果更新 mysql 表

php - MYSQL-PHP : Display products page issue

bash - 解析命令和命令选项的 bash 变量

javascript - 如何分配函数作为参数的变量