Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.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_Mysql_Arrays_Foreach - Fatal编程技术网

Php 通过数组获取mysql记录的数据?

Php 通过数组获取mysql记录的数据?,php,mysql,arrays,foreach,Php,Mysql,Arrays,Foreach,我正在我的网站上工作,我正在尝试实现一个如下功能: 管理员选中记录上的复选框以显示已收到付款。这些值存储在一个名为$paymentr的数组中,该数组被内爆并更新MySQL数据库 不管怎样,这里是我最棘手的部分: 执行此操作后,代码检查有多少行受到影响,然后向另一个人发送一封电子邮件,该电子邮件应根据数组中存储的ID列出记录的所有信息 出于某种原因,我花了很长时间试图弄明白如何做到这一点。我在电子邮件代码之前运行了一个foreach循环,它运行类似这样的代码。我简化了查询,因为它要长得多、复杂得多

我正在我的网站上工作,我正在尝试实现一个如下功能:

管理员选中记录上的复选框以显示已收到付款。这些值存储在一个名为$paymentr的数组中,该数组被内爆并更新MySQL数据库

不管怎样,这里是我最棘手的部分:

执行此操作后,代码检查有多少行受到影响,然后向另一个人发送一封电子邮件,该电子邮件应根据数组中存储的ID列出记录的所有信息

出于某种原因,我花了很长时间试图弄明白如何做到这一点。我在电子邮件代码之前运行了一个foreach循环,它运行类似这样的代码。我简化了查询,因为它要长得多、复杂得多,但我已经在phpmyadmin中对其进行了测试-

foreach ($paymentr as $v) {

$query = "SELECT transactions.id, transactions.refid, transactions.affid FROM transactions WHERE transactions.id = '$v'";

$result = mysql_query($query) or die("Query Failed: ".mysql_errno()." - ".mysql_error()."<BR>\n$query<BR>\n");
$trans = mysql_fetch_array($result, MYSQL_ASSOC);

$transactions .= '<br>User ID:'.$trans['id'].' -- '.$trans['refid'].' -- '.$trans['affid'].'';

}
然后$transactions变量将在电子邮件代码中发送出去


但遗憾的是,它没有起作用。有人有什么想法吗?我觉得我只是错过了一个关键的部分或想法。。。一切都会有帮助的。也许是地图?不过我从来没用过。非常感谢您:

我面前没有php mysql手册,但是您不应该使用这样的调用吗 mysql\u fetch\u assoc而不是mysql\u fetch\u数组

使用mysql_fetch_数组时,将字段指定为$trans[0]、$trans['1],而不是字符串,例如$trans['id']

-对不起,你是对的,我总是使用mysql\u fetch\u assoc调用而不是标志。 如果打印sql语句副本并将其粘贴到查询窗口中,以检查其是否正确运行,那么添加调试语句的过程是如何进行的。
其他DB调用是否按预期工作,可能您没有得到任何结果。

我尝试了您的代码,没有发现任何错误。为了帮助调试,您可以尝试添加一些打印和回显代码,以便更好地了解发生了什么

此外,您还提到您的数组已内爆,据我所知,该数组返回一个字符串,其值的格式为[value][separator][value]…。当'foreach'启动时,它仍然是一个数组吗?您是否发现$transactions为空

print_r ($paymentr);  // <-----  ADDED FOR DEBUG

foreach ($paymentr as $v) {

$query = "SELECT id, refid, affid FROM transactions WHERE id = '$v'";

echo $query . "<br/>";  // <-----  ADDED FOR DEBUG,  (XHTML <br/> closed tag)

$result = mysql_query($query) or die("Query Failed: ".mysql_errno()." - ".mysql_error()."<BR>\n$query<BR>\n");
$trans = mysql_fetch_array($result, MYSQL_ASSOC);

$transactions .= '<br>User ID:'.$trans['id'].' -- '.$trans['refid'].' -- '.$trans['affid'].'';    
}
或者,您可以这样做,这会减少对db的影响:

foreach ($paymentr as $v) { $in_clause .= "'".$v."',"; }
$in_clause = trim($in_clause, ",");
$query = "SELECT id, refid, affid FROM transactions WHERE id IN ($in_clause)";

$result = mysql_query($query) or die("Query Failed: ".mysql_errno()." - ".mysql_error()."<BR>\n$query<BR>\n");
while ( $trans = mysql_fetch_array ( $result, MYSQL_ASSOC ))    
{
  $transactions .= '<br>User ID:'.$trans['id'].' -- '.$trans['refid'].' -- '.$trans['affid'].'';
}

您是否已经检查了var_dump$trans打印的内容?再次您好,感谢您深思熟虑的回答和评论!我试过打印$paymentr;它正在输出正确的变量。我还尝试了var_dump$trans;也可以在上面打印。。。里面什么都没有!:/我在phpmyadmin中尝试了mysql查询,它成功了,得到了正确的记录。。。。我的错误文件中的第50行问题。。。这可能是因为我内爆了$paymentr,它不再是一个数组了吗?嗨,John,据我所知,通过在$result变量后指定mysql\u assoc,您可以使用mysql\u fetch\u数组,方法与mysql\u fetch\u assoc相同。。。如果您编写MYSQL_NUM,那么它将以数字形式执行数组。如果我错了,请纠正我好吗如果未指定类型,mysql\u fetch\u数组$con默认使用mysql\u BOTH,因此该数组将同时包含常规的数字索引0、1、2、3等。。。条目和关联的“id”、“名称”等。。。版本。再次您好,感谢您深思熟虑的回答和评论!我试过打印$paymentr;它正在输出正确的变量。我还尝试了var_dump$trans;也可以在上面打印。。。里面什么都没有!:/我在phpmyadmin中尝试了mysql查询,它成功了,得到了正确的记录……哦,我刚刚得到了一个启示。我正在用内爆覆盖变量名。嗯,让我试一下,把内爆改名为其他东西。是的,这就是诀窍。“内爆”是在我的数组上写的,给了foreach一个问题。谢谢你引起我的注意!