【发布时间】:2017-01-15 13:44:43
【问题描述】:
我只是(我知道很晚才知道)将我的一些代码从 mysql 更新到 mysqli,我注意到 fetch_array 函数的行为似乎发生了变化。
我们无意通过截断原始问题中的代码来混淆视听,但如果有帮助的话,可以更全面地了解实际代码。
使用:MYSQL
此步骤通过表格中从头到尾的每个合格记录
$con_head = mysql_connect($domain,$head_dbname,$head_dbpassword);
if (!$con_head)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db($head_dbname, $con_head);
$src_sql = "Select * from SEQUENCES where SEQUENCE_TYPE = 'N' and REVIEWED ='N' order by SEQ_START";
$src_tb = mysql_query($src_sql, $con_head);
while ($src_rec = mysql_fetch_array($src_tb))
{
..... statements here have no relevance to the problem
}
使用 MYSQLI
**这立即跳过了 WHILE 子句**
如果前面的行未注释,则从第二条记录开始。
$con_head = mysqli_connect("$domain,$head_dbname,$head_dbpassword,$head_dbname); // database name and user name are the same
if (!$con_head)
{
die('Could not connect: ' . mysqli_error());
}
$src_sql = "Select * from SEQUENCES where SEQUENCE_TYPE = 'N' and REVIEWED ='N' order by SEQ_START ";
$src_tb = mysqli_query($con_head, $src_sql);
// $src_rec = mysqli_fetch_array($src_tb,MYSQLI_BOTH);
while ($src_rec = mysqli_fetch_array($src_tb,MYSQLI_BOTH))
{
..... statements here have no relevance to the problem
}
这在 mysql 下可以正常工作,但在 mysqli 下的等效项立即无法通过“while”测试。
我已经检查过代码是否正常,通过在开始循环之前插入一个额外的 mysqli_fetch_array,这工作正常 - 尽管因此从 SECOND 记录开始处理。
很明显,我可以重写我的代码以以不同的方式循环(例如,在循环之前有 $record = mysqli_fetch_array,在循环中测试 $record,然后在 while 循环的结束大括号之前有一个额外的 $record = mysqli_fetch_array)但我急于了解行为上的差异,以免陷入任何其他陷阱。
谁能解释一下?
【问题讨论】:
-
您需要发布与
mysqli_函数完全一致的内容。这是错误的mysql_query($con,$sql) -
您发布的这段代码;不含水
-
"mysqli 下的等价物" — 什么等价物?向我们展示一个 minimal reproducible example 来演示问题,而不是一些您知道没有的代码。
-
请发布您运行的真实代码,不要任何编辑。
-
好的,抱歉——我并不想遗漏任何内容。我已经用展示不同行为的确切代码更新了上述内容。