2017-07-30 6 views
-1

私はPDOにすべてのMySQLのコードを変換していますし、このエラーが発生します -PDO INSERT文のエラー - パラメータ1列にならない配列

警告:PDO :: Execは()パラメータ1は、文字列、配列であることを期待以下は

で与えられたコードです:

$ent_date = $array[1]; 
$ent_time = $array[2]; 
$card_no = $array[3]; 

try { 
    $att = new PDO('mysql:host=localhost;dbname=att', 'root', ''); 
    $att->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $att1 = 'insert into att_detail (att_date,att_time,att_card_no) values (:date_ent,:time_ent,:cardno)'; 
    $att -> exec(array(
         ':date_ent'=>$ent_date, 
         ':time_ent'=>$ent_time, 
         ':cardno'=>$card_no)); 
    echo "new record created"; 
    } 
catch (PDOException $e){ 
         echo $att . "<BR>" . $e->getMessage(); 
        } 

$att = null; 

が解決する最も簡単な方法を理解する上で任意の助けを感謝しています。

+1

'exec'マニュアルをお読みになりますか? –

+0

@u_mulderはい、私が間違っていることを確認していません – X10nD

+0

'exec'はクエリを実行しますが、この関数の引数は__string__です。 –

答えて

1

execクエリを実行する場合、この関数の引数は文字列です。あなたがマニュアルに従うとPDOStatementオブジェクトを使用する必要がプリペアドステートメントを使用するには

$att1 = 'insert into att_detail (att_date,att_time,att_card_no) ...'; 
$att -> exec($att1); 

:簡単な方法execなしプレースホルダでクエリテキストで使用することができますでそう

あなたのコード

$att1 = 'insert into att_detail (att_date,att_time,att_card_no) values (:date_ent,:time_ent,:cardno)'; 
$stmt = $att->prepare($att1); 
$stmt->execute(array(
    ':date_ent'=>$ent_date, 
    ':time_ent'=>$ent_time, 
    ':cardno'=>$card_no 
)); 
echo "new record created"; 

また、ma(簡易版)のようになります。 execexecuteの違いを理解してください。あなたはここで、配列を受け入れませんexecを使用している

+0

私はexecute()を使用していましたが、それは試していませんでしたので、exec()を試しました。その後、私はいくつかのドキュメントを読んだ後に、まだ試してもエラーが発生しています。ありがとうございます。 – X10nD

0
$stmt = $att->prepare($att1); 

$result = $stmt->execute(array(
         ':date_ent'=>$ent_date, 
         ':time_ent'=>$ent_time, 
         ':cardno'=>$card_no)); 
+0

このコードは疑問に答えるかもしれませんが、他のものを導入せずに問題を解決する方法とその理由を説明する方が良いでしょう。コードのみの回答は長期的には有用ではありません。また、コードを一番上にフォーマットしてください。 –

+0

ありがとう、@BalagurunathanMarimuthu。あなたは正しい、これは私の通常のスタイルの答えではない。 – RichGoldMD

1

私はあなたがここにバインドするパラメータの配列を受け入れる代わりにexecuteを使用したいと思いマニュアルPDO::exec php manual

は手動ですPDO::execute()

関連する問題