Php 将mysql查询放入数组并使用多次错误

Php 将mysql查询放入数组并使用多次错误,php,Php,我有一个通常不会发生的大问题。由于某种原因,在这种情况下它会出错 好的,我输入了一个mysql查询IE $query = mysql_query("SELECT * from tablename"); 那么我说 $row = mysql_fetch_array($query,MYSQL_BOTH) 当我把(即使是一个空白的循环给我一个错误)一个循环在。。。 即 foreach($row作为$rowme){ //无所事事 echo$rowme['id']。“”; } 为foreach()提供

我有一个通常不会发生的大问题。由于某种原因,在这种情况下它会出错

好的,我输入了一个mysql查询IE

$query = mysql_query("SELECT * from tablename");
那么我说

$row = mysql_fetch_array($query,MYSQL_BOTH)
当我把(即使是一个空白的循环给我一个错误)一个循环在。。。 即

foreach($row作为$rowme){
//无所事事
echo$rowme['id']。“
”; }
为foreach()提供的参数无效

以前从未发生过这种情况——你知道为什么现在会这样吗

在服务器上运行PHP5.2.11

while($row=mysql\u fetch\u assoc)
=工作正常,但我只能在页面上使用一次。。。另一个问题是为什么我不能在其他地方再次使用相同的循环?(Coldfusion可以重复使用同一个查询循环?为什么PHP不使用
mysql\u fetch\u assoc
?)

我正在使用jQuery照片库,它填充一些重复的javascript,通过类在图像上写入描述,并重复它们所在的列表项,因此我需要相同查询的两个循环。显然,将查询结果放入数组并重复使用该数组应该可以正常工作

唯一的其他选择是创建两个完全相同的查询。然而,这似乎效率低下

有人能回答这些问题或解释一下吗。我非常绝望,非常非常非常落后于把这个画廊,(为什么我仍然在这里工作在凌晨1点22分)-将非常感谢

谢谢


答:

我怀疑错误与结果数量直接相关。从中可以看到返回类型为数组或FALSE。后者可能会给出您正在描述的错误

用mysql\u num\u rows()或

if($row){
foreach($row作为$rowme){
//无所事事
echo$rowme['id']。“
”; } }
我怀疑错误与结果数量直接相关。从中可以看到返回类型为数组或FALSE。后者可能会给出您正在描述的错误

用mysql\u num\u rows()或

if($row){
foreach($row作为$rowme){
//无所事事
echo$rowme['id']。“
”; } }
对于你的“两难困境”,有两种选择。在PHP中,如果不显式地告诉用户,就不能查询两次结果

但一个简单的选择是将它们存储到一个数组中:

$query = mysql_query("SELECT * from tablename");
while ($row = mysql_fetch_array($query,MYSQL_BOTH)) {
    $saved[] = $row;
}
这允许您两次使用结果集,并使您的foreach构造示例起作用:

foreach ($saved as $rowme){
     echo $rowme['id'] . "<br />";

请参阅手册中的。

对于您的“困境”,有两种选择。在PHP中,如果不显式地告诉用户,就不能查询两次结果

但一个简单的选择是将它们存储到一个数组中:

$query = mysql_query("SELECT * from tablename");
while ($row = mysql_fetch_array($query,MYSQL_BOTH)) {
    $saved[] = $row;
}
这允许您两次使用结果集,并使您的foreach构造示例起作用:

foreach ($saved as $rowme){
     echo $rowme['id'] . "<br />";

请参阅手册中的。

如果您想要阵列,请使用流构建阵列的方式

$data = array();

while($row = mysql_fetch_assoc($res)) {
    $data[] = $row;
}
但是当你这样做的时候,你需要大量的内存,当你的数组太大,超过了你可以在php.ini中定义的momory_限制时,你会得到如下错误


“致命错误:允许的内存大小为xxxxxxx字节exh…”

如果您想要一个数组,请使用流构建数组的方式

$data = array();

while($row = mysql_fetch_assoc($res)) {
    $data[] = $row;
}
但是当你这样做的时候,你需要大量的内存,当你的数组太大,超过了你可以在php.ini中定义的momory_限制时,你会得到如下错误

“致命错误:允许的内存大小为xxxxxxx字节exh…”

while($row=mysql\u fetch\u assoc)
=工作正常,但我只能在页面上使用一次

不是这样;如果($row=mysql\u fetch\u assoc(…),您可以任意多次编写

$arrayOfRows = array();
while($row = mysql_fetch_assoc($res)) //$row is a single row.  one element for every field of table
{
   $arrayOfRows[] = $row;
}

var_dump($arrayOfRows); //see what this looks like
然而,在您的例子中,如果您想再次迭代,您可能希望使用它让您返回到resultset的开头

为foreach()提供的参数无效

您从未检查过
$row
是否为数组。如果没有结果,
$row
将为
FALSE

while($row=mysql\u fetch\u assoc)
=工作正常,但我只能在页面上使用一次

不是这样;如果($row=mysql\u fetch\u assoc(…)
,您可以任意多次编写

$arrayOfRows = array();
while($row = mysql_fetch_assoc($res)) //$row is a single row.  one element for every field of table
{
   $arrayOfRows[] = $row;
}

var_dump($arrayOfRows); //see what this looks like
然而,在您的例子中,如果您想再次迭代,您可能希望使用它让您返回到resultset的开头

为foreach()提供的参数无效


您从未检查过
$row
是否为数组。如果没有结果,
$row
将是
FALSE

我认为您对每个mysql函数的功能有点误解。你选择的名字和你尝试使用它们的方式都表明了这一点

我将尝试用描述性变量名展示一个示例

$query = "SELECT * FROM tablename";   //$query is sql query
$res = mysql_query($quwey);           //$res is resource
资源封装查询结果。您可以使用
mysql\u fetch
函数获取数据。我将使用
mysql\u fetch\u assoc
一次获取一行,但是
mysql\u fetch\u数组
mysql\u fetch\u对象
也可以。每次它被呼叫,你就得到一排<代码>虽然
循环对于此bc是一个不错的选择,但它们将获取并重新分配新行,直到没有剩余的行为止

while($row = mysql_fetch_assoc($res)) //$row is an associative array for single row.  
                                      //one element for every field of table
{
   var_dump($row); //this will show you what $row looks like
}
您可以使用
foreach
$row
进行迭代,它将逐步遍历
$row
的每个元素。也就是说,表中一行的每个字段。这将不会访问多行

while($row = mysql_fetch_assoc($res)) 
{
   //$row['id'] makes sense
   foreach($row as $fieldName=>$fieldValue)
   {
       echo "$fieldName -> $fieldValue <br />;
       //$fieldName['id'] and $fieldValue['id'] do not make sense. they are not arrays
   }
}
或者,您可以将所有行存储到一个(多维)数组中,您可以在以后任意多次使用该数组

$arrayOfRows = array();
while($row = mysql_fetch_assoc($res)) //$row is a single row.  one element for every field of table
{
   $arrayOfRows[] = $row;
}

var_dump($arrayOfRows); //see what this looks like
这就是如何循环通过这个
$arrayOfRows
并在以后使用它的方法

foreach($arrayOfRows as $oneRow)
{
    foreach($oneRow as $fieldName=>$fieldValue)
    {
         //code here
    }
}

我想您可能有点误解了每个mysql函数的功能。你选择的名字和你尝试使用它们的方式都表明了这一点

我将尝试用描述性变量名展示一个示例

$query = "SELECT * FROM tablename";   //$query is sql query
$res = mysql_query($quwey);           //$res is resource
资源封装查询结果。您使用
我的