前提・実現したいこと
疑問符プレースホルダに連想配列の値をバインドし、その値をテーブルに入れることを試みてます。
配列の値が1つの場合、errorは出ませんが、2つにした場合sql構文エラーが出ます。
調べたのですが、理由も解決法も分からないので、教えていただけるとありがたいです。
発生している問題・エラーメッセージ
array2を実行すると、sql構文エラーが出ます。
Error:SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'num2) VALUES(2,1,2)' at line 1
該当のソースコード
array1
1<?php 2try{ 3 4 // 接続設定 5 $dsn = 'mysql:host=localhost;dbname=test;charset=utf8'; 6 $user = 'root'; 7 $pass = ''; 8 9 $dbh = new PDO($dsn, $user, $pass, 10 array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 11 12 )); 13 14 echo "接続成功"; 15 16 17 $id=(int)1; 18 $number=array(); 19 $number=array('num1'=>1,); 20 21 22 $sql='INSERT INTO syntax(id,num1) VALUES(?,?)'; 23 $prepare = $dbh -> prepare($sql); 24 $prepare->bindParam(1, $id,PDO::PARAM_INT ); 25 $prepare->bindParam(2, $number['num1'],PDO::PARAM_INT ); 26 27 $prepare->execute(); 28 29 //データベース接続切断 30 $dbh = null; 31 32 echo 'データが送信されました'; 33 34}catch (PDOException $e){ 35 print('Error:'.$e->getMessage()); 36 die(); 37} 38 39?> 40 41 42
array2
1 2<?php 3try{ 4 5 // 接続設定 6 $dsn = 'mysql:host=localhost;dbname=test;charset=utf8'; 7 $user = 'root'; 8 $pass = ''; 9 10 $dbh = new PDO($dsn, $user, $pass, 11 array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 12 13 )); 14 15 echo "接続成功"; 16 17 18 $id=(int)2; 19 $number=array(); 20 $number=array('num1'=>1, 'num2'=>2); 21 22 23 24 $sql='INSERT INTO syntax(id,num1,num2) VALUES(?,?,?)'; 25 $prepare = $dbh -> prepare($sql); 26 $prepare->bindParam(1, $id,PDO::PARAM_INT ); 27 $prepare->bindParam(2, $number['num1'],PDO::PARAM_INT ); 28 $prepare->bindParam(3, $number['num2'],PDO::PARAM_INT ); 29 30 $prepare->execute(); 31 32 33 34 //データベース接続切断 35 $dbh = null; 36 37 echo 'データが送信されました'; 38 39}catch (PDOException $e){ 40 print('Error:'.$e->getMessage()); 41 die(); 42} 43 44?>
補足情報(FW/ツールのバージョンなど)
バージョンは、
PHP5.6
10.1.38-MariaDB
です。
回答1件
あなたの回答
tips
プレビュー