2012-03-13 8 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を挿入しようとしている

$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

+0

@John私は自分の答えを削除し、構文ハイライターを喜ばせるために引用符を修正しました。 –

+0

エラーは表示されません。それは目標に向かっているだけです。 – John

答えて

1

あなたの古いmysqlバージョンに基づいてDATETIMEカラムになるようにしてください。ただし、フォーマットは間違っています。

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

古いコードでNOW()の使用に基づいて、我々はDATETIMEタイプであることをTableB.Dateを前提としています。あなたはTableBためNOW()を使用していないので、あなたの新しいコードではそう

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

あなたが作成する必要があり、挿入$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(); 
$insert = "INSERT INTO TableB (Date, ID) VALUES(NOW() ,?) "; 
     if($query = $db->prepare($insert)){ 
      $query->bind_param('s', $id); 
      $query->execute(); 
+0

大丈夫、私はそれをNOW()に変更しました。その時間を計算するだけで済みます。 – John

3

あなたが実際のエラー言及していないが、その問題はここから発生するようです::210または、ちょうどあなたがPHPコードの時間を指定する理由がない限り、新しいコードでは、MySQLのNOW()を使用

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

ここでは、mysqlバージョンのコードのようにループを使用していませんでした。

+0

こんにちは、私はエラーが表示されます:警告:mysqli_result :: fetch_assoc()は、正確に0のパラメータを期待しています、1行に/var/www/web775/html/login.phpで与えられました NULLその行にあるもの:$ sum = $ result4-> fetch_assoc($ count);しかし、2つのパラメータがありますか? – John

+0

あなたはあなたの結果オブジェクトを通してそれを参照しているので、パラメータを渡す必要はありません。なぜあなたは$ countを渡しましたか? –

+0

私はこれがmysqliを使って作業するときにオブジェクトにバインドする必要があると思ったからです。私はそれを参照せずに開始するとき、私はerrormessageを取得します:array(1){["val"] => string(1) "0"} – John

関連する問題