Ajaxを使ってPHPに飛ばしたデータを、prepareとexecuteメソッドを用いて、データベースに格納しようとしています。
inputに入力された大量のデータを一度に処理するため、まずはpassというデータを用いてinsertをし、その後、当該passデータのフィールドにその他のデータをupdateで入れるという方法をとろうと考えています。
lang
1function ajax_func(){ 2 function getXMLHttpRequestObject(){ 3 var ajax = null; 4 if (window.XMLHttpRequest){ 5 ajax = new XMLHttpRequest(); 6 } else if (window.ActiveXObject){ 7 ajax = new ActiveXObject('MSXML2.XMLHTTP.3.0'); 8 } 9 return ajax; 10 } 11 <!--passのデータをdataに入れる。--> 12 var data = new Object(); 13 $("input#pass").each(function() { 14 data[$(this).attr("id")] = $(this).val(); 15 }); 16 <!--pass以外のデータを配列でsenddataに入れる。--> 17 var senddata = new Object(); 18 $("input.ajax").each(function(){ 19 senddata[$(this).attr("id")] = $(this).val(); 20 $.ajax({ 21 type: "POST", 22 url: "http://・・・.php", 23 data: data, 24 success: function(msg){ 25 alert(msg) ; 26 }, 27 error: function(XMLHttpRequest, textStatus, errorThrown){ 28 alert(errorThrown); 29 } 30 }) 31 <!--pass以外のデータを送信。--> 32 $.ajax({ 33 type: "POST", 34 url: "http://・・・.php", 35 data: senddata, 36 success: function(msg){ 37 alert(msg) ; 38 }, 39 error: function(XMLHttpRequest, textStatus, errorThrown){ 40 alert(errorThrown); 41 } 42 }) 43 return false; 44} 45}); 46
lang
1<!--passのデータをinsertする処理--> 2$st = $db ->prepare("INSERT INTO テーブル名(pass) VALUES(?)") ; 3$result = $db ->execute($st,array($_POST['pass'])) ; 4 5<!--その他のデータをupdateする処理--> 6foreach($_POST as $key => $value){ 7 $st = $pdo -> prepare("UPDATE テーブル名 SET ? = ? WHERE pass = ?"); 8 $st -> execute(array($key,$value,$_POST['pass'])); 9 if (!$st) { 10 die('UPDATEクエリーが失敗しました。'.mysql_error()); 11 };
javascriptには問題ないと思います。
エラーも出ていないし、
lang
1echo $key.' => '.$value.' '
と記述すると、phpに全てのデータが飛んでいることは確認できたからです。
phpにおいても、passのデータをinsertする処理は、問題なく、データベースに登録できていました。
とすると、その他のデータをupdateする処理に誤りがあるのだと思います。
prepareメソッド、executeメソッドの処理が間違っているのでしょうか。
なお、
lang
1var_dump ($st);
を記述してみたら、下記の表示が出ました。
object(PDOStatement)#5(1){
["queryString"]=>
string(49)"UPDATE テーブル名 SET ? = ? WHERE pass = ?"
}
これが、inputのその他のデータ分、表示されます。
ということは、やはり、prepareメソッド、executeメソッドがうまく働いていないのだと思います。
ちなみに、prepareメソッドとexecuteメソッドは、下記サイトを参照しました。
お分かりの方、ご教示頂ければ幸いです。よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。