Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL查询问题_Php_Sql_Mysql_Arrays_Foreach - Fatal编程技术网

Php MySQL查询问题

Php MySQL查询问题,php,sql,mysql,arrays,foreach,Php,Sql,Mysql,Arrays,Foreach,我有以下SQL查询: SELECT id, retailerName, savingsDetails FROM coupons WHERE zone = '1'; 当我在phpMyAdmin中运行它时,我会得到一个整洁的行列表,这些行和我的区域的值相匹配 假设SQL代码是$gotRows。我尝试使用mysql\u fetch\u数组(mysql\u query($gotRows)),但出于某种原因,它只创建了一个1x3数组,而不是(在本例中)17x3数组。也就是说,数组中只有一个条目,而不是

我有以下SQL查询:

SELECT id, retailerName, savingsDetails
FROM coupons
WHERE zone =  '1';
当我在phpMyAdmin中运行它时,我会得到一个整洁的行列表,这些行和我的
区域的值相匹配

假设SQL代码是
$gotRows
。我尝试使用
mysql\u fetch\u数组(mysql\u query($gotRows))
,但出于某种原因,它只创建了一个1x3数组,而不是(在本例中)17x3数组。也就是说,数组中只有一个条目,而不是应该包含的17个条目

当我尝试这样做时:

foreach($resultOfThat as $foo)
{
    echo $foo;
}
它的行为很奇怪,给我类似的输出(由于数组中只有一个条目,所以只运行一次迭代):

其中id=3,retailerName=foo,savingsDetails=bar。如中所示,尝试循环数组只会给它的每个部分带来双重结果,类似于我所描述的


出现了什么问题?

这将帮助您调试:

$result = mysql_query($gotRows);
if (!$result) {
  die(mysql_error());
}
while ($row = mysql_fetch_assoc($result)) {
  var_dump($row);
}
以数组形式返回单个行。使用循环检索所有结果(可选地将其存储在数组中):

$arr = array();
$q = mysql_query($gotRows);
while ($row = mysql_fetch_array($q)) {
    $arr[] = $row;
}
//$arr now holds the 17x3 result set
var_dump($arr);
此外,它们自身的行是数组,用于索引第一列,
echo$row[0]
。要以关联数组的形式获取结果,请参阅Patrik的答案。

您使用的方法()需要对运行查询的引用,即:

$queryCursor = mysql_query($query);
while($row = mysql_fetch_array($queryCursor))
{
  // Do your thing with $row
}
它还返回结果集中的“下一行”,而不是整个结果

得到重复条目的原因是mysql_fetch_数组采用了一个辅助参数,该参数描述了该方法是应该在每一列的行中返回数值型、关联型还是两种类型。默认情况下,为每列返回数字和关联项

如果只需要数字或关联列,请将最后一个参数指定为
MYSQL\u ASSOC
,或使用其他函数,例如

最后,我强烈建议您使用某种DBAL(数据库抽象层)和可选的ORM(对象关系映射器),因为无论何时您想要与数据库交互,内置库都需要大量的锅炉板代码。当您想要设置更高级的东西,例如共享连接与多个连接、将CRUD查询委托给特定连接(以便以后可以复制到从属数据库)等时,这也会使您更加困难,或者至少需要您进行更多的编码。DBAL通常具有这种内置功能。 ORM负责将关系表示透明地转换为面向对象的表示,使您能够专注于应用程序,而不是构建映射程序代码


想到的图书馆是和。还有很多其他库,我建议您找到一个适合您编程风格的主动维护库。

嘿,您还不知道如何处理SQL查询吗?比如在这个问题上:我也没发表评论就被否决了。我喜欢这种行为
$queryCursor = mysql_query($query);
while($row = mysql_fetch_array($queryCursor))
{
  // Do your thing with $row
}