2012-03-13 105 views
1

我对登录脚本有以下问题。此刻我刷新我的网站,并想将mysql更改为mysqli。我有一个工作代码,它可以像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'"); 

这里是mysqli的版本,这不会工作,我不知道为什么:

$time = gmdate("M d Y H:i:s", time()); 
     $id = '".$row["id"]."'; 

$get_id = "SELECT id FROM tableA WHERE x1='".$x1."' AND x2='".$x2."'"; 
      $result = mysqli_query($db, $get_id); 

      if ($result === false) { 
       printf("Errormessage 1"); 
       exit(); 
       } 

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

      $update = "UPDATE tableA SET time=now(), x4=x4 + 1 WHERE id='".$row["id"]."'"; 
      $result2 = mysqli_query($db, $update); 

      if ($result2 === false) { 
       printf("Errormessage 2"); 
       exit(); 
       } 

      $reset = "DELETE FROM tableB WHERE (NOW() - INTERVAL 1 DAY) > Date AND ID='".$row["id"]."'"; 
      $result3 = mysqli_query($db, $reset); 

      if ($result3 === false) { 
       printf("Errormessage 4"); 
       exit(); 
       } 

      $count = "SELECT COUNT(*) AS val FROM tableB WHERE ID='".$row["id"]."'"; 
      $result4 = mysqli_query($db, $count); 

      if ($result4 === false) { 
       printf("Errormessage 5"); 
       exit(); 
       } 

      $sum = $result4->fetch_assoc($count); 
      var_dump($sum); 

      if ($count [val] <xy){ 

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

      $update_x = "UPDATE tableA SET x7=x7 + 1 WHERE id='".$row["id"]."'"; 
      $result5 = mysqli_query($db, $update_x); 

      if ($result5 === false) { 
       printf("Errormessage 5"); 
       exit(); 
+0

什么是错误? – Jakub 2012-03-13 13:43:33

+0

@John我删除了我的答案,并修正了引用语法荧光笔的问题。 – 2012-03-13 13:47:45

+0

将不会显示错误。它只是为了达到目标。 – John 2012-03-13 13:48:26

回答

1

您正试图插入$time成什么出现成为DATETIME列,基于旧的mysql版本,但格式不正确。

$time = gmdate("M d Y H:i:s", time()); 

根据您的旧代码使用NOW(),我们假设TableB.Date是一个DATETIME类型:

mysql_query("INSERT INTO tableB (Date, ID) VALUES (now(),'$id') "); 

因此,在你新的代码,因为你没有为TableB使用NOW()插入,你应该创建$timeYYYY-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(); 
+0

好吧,我改变了NOW()。只需要用那个时间来计算。 – John 2012-03-13 14:10:40

3

您没有提及实际的错误,但它似乎从这里出现了这个问题:

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

你没有使用循环,就像你的mysql版本的代码。

+0

你好,现在我得到了错误:警告:mysqli_result :: fetch_assoc()期望完全0参数,1在/var/www/web775/html/login.php在线100给出012elNULL该行是什么:$ sum = $ result4-> fetch_assoc($ count);但有2个参数?! – John 2012-03-13 14:11:47

+0

你通过你的结果对象引用它,你不需要传递任何参数。你为什么通过$计数? – 2012-03-13 14:59:33

+0

,因为我认为在使用mysqli时必须将它绑定到对象。当我开始它没有引用,我得到errormessage:数组(1){[“val”] =>字符串(1)“0”} – John 2012-03-13 15:06:33