Php MySQL查询问题
我有以下SQL查询: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数组。也就是说,数组中只有一个条目,而不是
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
}