2013-04-03 9 views
8

mysqlからmysqliに登録スクリプトを変換しました。私はこれは私がユーザーMySqliコマンドが同期していません。今すぐこのコマンドを実行することはできません

function register_user($register_data) { 
global $myConnection; 
array_walk($register_data, 'array_sanitize'); 
//Make the array readable and seperate the fields from data 
$fields = '`' . implode('`, `', array_keys($register_data)) . '`'; 
$data = '\'' . implode('\', \'', $register_data) . '\''; 
//Insert the data and email an activation email to the user 
mysqli_query($myConnection, "INSERT INTO `members` ($fields) VALUES ($data)") or die(mysqli_error($myConnection)); 
email($register_data['mem_email'], 'Activate your account', "Hello " . $register_data['mem_first_name'] . ",\n\nThank you for creating an account with H Fencing. Please use the link below to activate your account so we can confirm you identity:\n\nhttp://blah.blah.co.uk/activate.php?mem_email=" . $register_data['mem_email'] . "&email_code=" . $register_data['email_code'] . "\n\n - David & Jay "); 
} 

にメールを登録するために使用する関数は、私の配列から正しいデータを細かい送信しているが、それは今私にエラーを与える

Commands out of sync; you can't run this command now 

のmysqlとしてうまく働きました。ただし、データベースにデータが挿入されていないため、上記のエラーが発生します。私は以前にこのエラーに遭遇したことはありません。

+3

1.実行する前に、クエリを印刷して見てください。 2.クエリをパラメータ化します。 3.神の愛のために、あなたの質問をパラメータ化する。 – Sammitch

答えて

9

コマンドが同期していません。クライアントコードでこのコマンドを実行することはできません。間違った順序でクライアント関数を呼び出しています。

これは、たとえば、mysql_use_result()を使用していて、mysql_free_result()を呼び出す前に新しいクエリを実行しようとした場合に発生します。間にmysql_use_result()またはmysql_store_result()を呼び出さずにデータを返す2つのクエリを実行しようとした場合にも発生します。ここから

http://dev.mysql.com/doc/refman/5.0/en/commands-out-of-sync.html

更新

クエリのための変数を作るとMySQL Workbenchのようなものに直接変数を貼り付ける場合は、実行前に構文を確認することができます。

<?php 
      function myConnection(){ 
       $myConnection = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db'); 
       return $myConnection; 
      } 


    function register_user($register_data) { 
     array_walk($register_data, 'array_sanitize'); 
     //Make the array readable and seperate the fields from data 
     $fields = '`' . implode('`, `', array_keys($register_data)) . '`'; 
     $data = "'" . implode("', '", $register_data) . "'"; 
     //Insert the data and email an activation email to the user 
     $query = "INSERT INTO `members` ($fields) VALUES ($data)"; 
        $myNewConnection = myConnection();   

        if($result = mysqli_query($myNewConnection, $query)){ 
     email($register_data['mem_email'], 'Activate your account', "Hello " . $register_data['mem_first_name'] . ",\n\nThank you for creating an account with H Fencing. Please use the link below to activate your account so we can confirm you identity:\n\nhttp://blah.blah.co.uk/activate.php?mem_email=" . $register_data['mem_email'] . "&email_code=" . $register_data['email_code'] . "\n\n - David & Jay "); 
     mysqli_free_result($result); 
     return ("Success"); 
     } else { 
      echo $query; 
      die(mysqli_error($myNewConnection)); 
     } 

    } 

?> 
+0

私はPHPmyadminに直接クエリを貼り付け、実際のクエリが動作することを意味して罰金を挿入しました – jhetheringt7

+0

mysqli_free_resultの部分でこのコードを試しましたか? –

+0

はい、それは、elseステートメントを実行し、ifステートメントを実行するのではなく、クエリを出力します。 – jhetheringt7

関連する問題