2011-12-14 9 views
0

私はクラスを作成していますが、いくつかの入力からテーブルにデータを挿入する関数があります。テーブルをチェックすると動作しますが、 "prepareの引数の数がbind_resultのargの数と一致しません"というエラーが出ています。私の方法が正しいかどうかも私にはわからない...MySql DBにデータを挿入します

private function insertData($foldName,$foldClass,$foldLink) { 

    $sql = "INSERT INTO folders (folder_name,folder_class,folder_link) VALUES ('$foldName','$foldClass','$foldLink')"; 

    if($stmt = $this->connect->prepare($sql)) { 
     $stmt->execute(); 
     $stmt->bind_result($foldName,$foldClass,$foldLink); 
     $stmt->close(); 
     $error = false; 
     $message['error'] = false; 
     $message['message'] = "Data Successfuly Inserted"; 
     return json_encode($message); 
    } 
     else { 
      $error = true; 
      $message['error'] = true; 
      $message['message'] = "Data Failed To Insert"; 
      return json_encode($message); 
     } 

} 
+0

insert文が結果セットを返さない、そうに結合するものは、実際には存在しないがいう; '$ stmt-> bind_result ...'行を削除してください。 – codeling

+0

これは 'mysqli'に関する質問です。 – deceze

+0

これはmysqli yesに関連しており、bind_result()を削除したばかりです。私はそれを試して、今起こっていることを見てみましょう... – Roland

答えて

3

を使用すると、データを挿入し、いずれかを選択していないとして、あなたは全くbind_resultを必要としません。

ただし、準備済みのステートメントの中核機能を使用する必要があります。それは次のとおりです。安全に文オブジェクトに変数を渡す代わりに、SQL文字列に彼らの「生」の値を挿入する:

$sql = "INSERT INTO folders (folder_name,folder_class,folder_link) VALUES (?,?,?)"; 
$stmt = $this->connect->prepare($sql); 
$stmt->bind_param("sss", $foldName, $foldClass, $foldLink); 
$stmt->execute(); 

(私はそれをテストしていません。)最初の例で

+0

私はちょうどやった、それは働いた:)そして、私はそれを持ってほしかった(...準備...)ので、プロセス...また、インデックスは5です、私は自動インクリメントint(11)に設定したfolder_idを意味します。何とかリセットして1から始めることができますか? – Roland

+0

@Roland私はそれがうまく動作します。私の例では単純さのために 'if'文をスキップしました。確かに、あなたはあなたの 'if'ステートメントにとどまるべきです。 'auto_increment'カラムについて:' folder_id'カラムを削除して直接追加したり、次のようなMySQLステートメントを実行することができます: 'ALTER TABLE folders AUTO_INCREMENT = 1'。 – Flinsch

+0

ありがとう、ありがとう。私はphpmyadminからやった。私はXAMPPを使ってローカルサーバーで作業しています。そして時にはOVERHEAD 80を見て、最適化するためにクリックしますが、なぜそれが表示されますか? – Roland

0

あなたがtruncateクエリを使用し、全体として、テーブルのデータを空にするている場合:

TRUNCATE TABLE `table_name` 

これはリセットします1からauto_increment、しかし、あなたはalterその代わりにできるテーブル全体空にしたくない場合:私は希望、

ALTER TABLE `table_name` auto_increment = 1 
+0

まあ、私は多次元配列でそれを設定するためにそれを準備するためにそれを空にしています。そして私はそれをする前に空でなければならない。私は多次元配列$ array = array(array( 'Name' => 'Somename'、 'C​​lass' => 'Someclass'、 'Link' => 'Somelink')、array(他のものと同じ) );と私はそれをループし、2番目のレベルの配列を取って、私は上記の質問にあると同じdbは、データベースに格納する。私はこのように考えていた:http://snippi.com/s/m7cl7gr。それは働くことができますか? – Roland

+0

私はそれをテストし、それは正常に動作します。 truncateについてのヒントをありがとう:) – Roland

関連する問題