我(我非常姗姗来迟)将我的一些代码从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
**这个条款立即开始**
如果在发生这种情况时立即上行 - 这笔费用已从第二次记录开始。
$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,在while循环中使用循环测试$ record然后额外$ record = mysqli_fetch_array,然后在while循环中结束大括号)但我急于理解行为上的差异,这样我就不会遇到任何其他陷阱。
任何人都可以解释一下吗?
答案 0 :(得分:2)
没有区别。
两种功能在各种可能的方式都表现得相同。
你可能注意到的任何差异都是由你自己的某种错误造成的。