PHP foreach,查询中使用的数组数据

标签 php mysql arrays foreach

我有:

$array1 =     //contains places ids and locations;
$array2 = array();
$array3 = array();


  foreach($array1 as $itemz)
  {     
      $array2[] = $itemz[place][id];
      $array3[] = $itemz[place][location][city];

      $sql = "select * from places where id=".$array2." and location=".$array3."";
  }

但是当我打印 $sql 时,我得到:

  select * from places where id=12 and location=Array

任何人都可以告诉我代码有什么问题吗?

谢谢!

最佳答案

很抱歉,您的代码根本没有意义。我很惊讶你能得到那个结果。让我们来看看它。

引号在哪里?

$array2[] = $itemz[place][id];
$array3[] = $itemz[place][location][city];

此处遗漏引号,请添加

$array2[] = $itemz['place']['id'];
$array3[] = $itemz['place']['location']['city'];

数组到字符串的转换

$sql = "select * from places where id=".$array2." and location=".$array3."";

这个声明不应该有两个原因。

  1. 假设 id 是一个 INT 字段,而您在 $array2 中有一堆 INT,如果没有 MySQL,您仍然无法比较它们 IN.

  2. 您正在将 PHP 数组转换为字符串。那行不通的。

因为你在循环中运行它,$array2[]$array3[] 将继续变化并增长。

所以你实际上想做的是想出一个像

这样的查询
$sql = "SELECT * 
        FROM places 
        WHERE 
             id IN (" . implode(',', $array2) . ") AND 
             location IN (" . implode(',', $array3) . ")";

但这根本没有意义,因为随着循环的继续,您将逐步检索相同的数据。

所以我认为你真正想做的是

$sql = "SELECT * 
        FROM places 
        WHERE 
             id = {$itemz['place']['id']} AND 
             location = {$itemz['place']['location']['city']}";

这很可能是您所需要的。这会在您遍历数组时检索每一行的行。

我会做的一些改进是。

在循环完成后运行一次查询,这样您只需运行一次查询而不是 n 次。

此外,考虑只检索您需要的列,而不是执行 SELECT *

关于PHP foreach,查询中使用的数组数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5715624/

相关文章:

javascript - NodeList.prototype.forEach = Array.prototype.forEach;

JAVA - 从字节数组创建 X509 证书

php - 对超过 100 万行的表运行查询

php - MySql 适合大型数据库吗?

mysql - 在 SQL 表中容纳航路点

PHP 在 for 循环中删除文件

php - 将 64 位 debian 上的 PHP 扩展编译为 32 位 PHP 安装

php - 如何使用 CakePHP 用户名和密码访问 WordPress 管理员?

mysql - 使用ruby远程连接到mysql2

c - 将 malloc 字符串索引初始化为 NULL