Php 将mysql查询放入数组并使用多次错误
我有一个通常不会发生的大问题。由于某种原因,在这种情况下它会出错 好的,我输入了一个mysql查询IEPhp 将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()提供
$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
资源封装查询结果。您使用我的