Php 如何将mysql转换为mysqli

Php 如何将mysql转换为mysqli,php,mysql,login,mysqli,Php,Mysql,Login,Mysqli,我的登录脚本有以下问题。目前,我刷新了我的网站,并希望将mysql改为mysqli。我有一个可以正常工作的代码,它可以和mysql一起工作。现在我在把它改成mysqli时遇到了麻烦,因为它不起作用 以下是原始的mysql代码: while($row = mysql_fetch_array($sql)){ $id = $row["id"]; session_register('id'); $_SESSION['id'] = $id; mysql_query("

我的登录脚本有以下问题。目前,我刷新了我的网站,并希望将mysql改为mysqli。我有一个可以正常工作的代码,它可以和mysql一起工作。现在我在把它改成mysqli时遇到了麻烦,因为它不起作用

以下是原始的mysql代码:

while($row = mysql_fetch_array($sql)){ 

    $id = $row["id"];   
    session_register('id'); 
    $_SESSION['id'] = $id;

mysql_query("UPDATE tableA SET time=now(), x4=x4 + 1 WHERE id='$id'"); 
mysql_query("DELETE FROM tableB WHERE (NOW() - INTERVAL 1 DAY) > Date AND ID='$id'"); 
        $result = mysql_query("SELECT COUNT(*) AS val FROM tableB WHERE ID='$id'");
        $count = mysql_fetch_assoc($result);
        var_dump($count);

    if ($count [val] <xy){  
        mysql_query("INSERT INTO tableB (Date, ID) VALUES (now(),'$id') ");
        mysql_query("UPDATE tableA SET x7=x7 + 1 WHERE id='$id'");
while($row=mysql\u fetch\u array($sql)){
$id=$row[“id”];
会话_寄存器('id');
$\会话['id']=$id;
mysql_查询(“UPDATE tableA SET time=now(),x4=x4+1,其中id='$id');
mysql_查询(“从表B中删除,其中(NOW()-INTERVAL 1 DAY)>日期和ID='$ID'”;
$result=mysql_查询(“从表B中选择COUNT(*)作为val,其中ID='$ID');
$count=mysql\u fetch\u assoc($result);
var_转储(计数);
if($count[val]获取数组(MYSQLI\u ASSOC);
$update=“update tableA SET time=now(),x4=x4+1,其中id=”。$row[“id”]。“”;
$result2=mysqli_查询($db,$update);
如果($result2==false){
printf(“错误信息2”);
退出();
}
$reset=“从表B中删除,其中(现在()-间隔1天)>日期和ID=””$row[“ID”]。“”;
$result3=mysqli_查询($db,$reset);
如果($result3==false){
printf(“错误消息4”);
退出();
}
$count=“从表B中选择count(*)作为val,其中ID=”。$row[“ID”]。”;
$result4=mysqli_查询($db,$count);
如果($result4==false){
printf(“错误消息5”);
退出();
}
$sum=$result4->fetch\u assoc($count);
var_dump(金额);
如果($count[val]prepare($insert)){
$query->bind_参数('ss',$time,$id);
$query->execute();
$update_x=“update tableA SET x7=x7+1,其中id=”。$row[“id”]。”;
$result5=mysqli\u查询($db,$update\u x);
如果($result5==false){
printf(“错误消息5”);
退出();

您正试图将
$time
插入到基于旧mysql版本的
DATETIME
列中,但格式不正确

$time = gmdate("M d Y H:i:s", time());
根据您在旧代码中使用的
NOW()
,我们假设
TableB.Date
DATETIME
类型:

mysql_query("INSERT INTO tableB (Date, ID) VALUES (now(),'$id') ");
因此,在您的新代码中,由于您没有对
表b
插入使用
NOW()
,因此您应该将
$time
创建为
YYYY-MM-DD

// Should be YYYY-MM-DDD H:i:s for MySQL
$time = gmdate("Y-m-d H:i:s", time());

// It gets inserted into TableB here
$insert = "INSERT INTO TableB (Date, ID) VALUES(?,?) ";
        if($query = $db->prepare($insert)){
            $query->bind_param('ss', $time, $id);
            $query->execute();
或者,在新代码中使用MySQL的
NOW()
,除非您有理由在PHP代码中指定时间:

$insert = "INSERT INTO TableB (Date, ID) VALUES(NOW() ,?) ";
        if($query = $db->prepare($insert)){
            $query->bind_param('s', $id);
            $query->execute();

您正试图根据旧的mysql版本将
$time
插入看似是
DATETIME
的列中,但格式不正确

$time = gmdate("M d Y H:i:s", time());
根据您在旧代码中使用的
NOW()
,我们假设
TableB.Date
DATETIME
类型:

mysql_query("INSERT INTO tableB (Date, ID) VALUES (now(),'$id') ");
因此,在您的新代码中,由于您没有对
表b
插入使用
NOW()
,因此您应该将
$time
创建为
YYYY-MM-DD

// Should be YYYY-MM-DDD H:i:s for MySQL
$time = gmdate("Y-m-d H:i:s", time());

// It gets inserted into TableB here
$insert = "INSERT INTO TableB (Date, ID) VALUES(?,?) ";
        if($query = $db->prepare($insert)){
            $query->bind_param('ss', $time, $id);
            $query->execute();
或者,在新代码中使用MySQL的
NOW()
,除非您有理由在PHP代码中指定时间:

$insert = "INSERT INTO TableB (Date, ID) VALUES(NOW() ,?) ";
        if($query = $db->prepare($insert)){
            $query->bind_param('s', $id);
            $query->execute();

您没有提到实际的错误,但问题似乎发生在这里:

 $row = $result->fetch_array(MYSQLI_ASSOC);

您在这里没有像mysql版本的代码那样使用循环。

您没有提到实际的错误,但问题似乎发生在这里:

 $row = $result->fetch_array(MYSQLI_ASSOC);

您没有像mysql版本的代码那样在此处使用循环。

@John我删除了我的答案,并修复了引号以取悦语法高亮。不会显示错误。它只是指向目标。@John如果其中一个答案解决了您的问题,您可以将其标记为已接受。保留您的问题将有助于其他具有类似问题的人。@p将来的问题。@John我删除了我的答案并修正了引号,以取悦语法高亮显示。不会显示任何错误。它只是指向目标。@John如果其中一个答案解决了您的问题,您可以将其标记为已接受。保留您的问题将有助于将来遇到类似问题的其他人。好的,我更改了答案to NOW()。只需要用那个时间计算。好的,我把它改成了NOW()。只需要用那个时间计算。您好,现在我得到了错误:警告:mysqli_result::fetch_assoc()只需要0个参数,第100行的/var/www/web775/html/login.php中给出的1个参数是空的:$sum=$result4->fetch_assoc($count);但是有2个参数?!您通过结果对象引用它,不需要传递任何参数。为什么传递$count???因为我认为在使用mysqli时将其绑定到对象是必要的。当我在没有引用的情况下启动它时,我得到错误消息:array(1){[“val”]=>string(1)“0”}这似乎是出了什么问题,或者为什么会显示错误消息。此时,表B是空的,上面写着“0”但是为什么没有输入?我不明白为什么即使我使用带有错误的emailAddress,它也会显示该消息。根据php文档,当查询失败时,mysqli_查询返回false,因此请检查查询hello,现在我得到错误:警告:mysqli_result::fetch_assoc()需要0个参数,第100行的/var/www/web775/html/login.php中给出了1个参数NULL该行中的内容:$sum=$result4->fetch_assoc($count);但有2个参数?!您通过结果对象引用它,不需要传递任何参数。为什么传递$count???因为我认为在使用mysqli时将其绑定到对象是必要的。当我在不引用的情况下启动它时,会收到错误消息:array(1){[“val”]=>string(1)“0”}那么,它似乎是出了什么问题,或者为什么它会显示错误消息。目前,表格B是空的,上面写着“0”,但为什么不是呢