PHPでmysqlへの書き込みでエラー
PHPとmysqlを最近勉強し始めました。
PHPでmysqlへデータベースの書き込みをする時に変数からデータを書き込むとエラーが出て、どうしてなのかが色々と検索してみたのですが、解決できずにいます。
どなたかご教示ください。
弁当の注文を把握するために作りました。
mysqlには
ソースは以下の通りです。
表示だけなら、全項目表示は出来ます。
データベースに書き込みんで貯めたいのですが、phpmyadminでデータを記入し、SQL実行ならできました。
mysqlには order というテーブルに
orderid int(5)
syain varchar(11)
syohinmei varchar(11)
kingaku int(11)
timestamp datetime
上記のカラムが作成してあります。
<?php
$gokojo = $_GET['gokojo'];
$syain = $_GET['syain'];
$bento = $_GET['bento'];
$orderkojo = $_GET['orderkojo'];
$syohinmei = $_GET['syohinmei'];
$kingaku = $_GET['kingaku'];
$db_user = "naka"; // ユーザー名
$db_pass = "naka"; // パスワード
$db_host = "192.168.0.9"; // ホスト名
$db_name = "bento"; // データベース名
$db_type = "mysql"; // データベースの種類
$dsn = "$db_type:host=$db_host;dbname=$db_name;charset=utf8";
try {
$pdo = new PDO($dsn, $db_user,$db_pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
} catch(PDOException $Exception) {
die('エラー :' . $Exception->getMessage());
}
$timestamp = date("Y-m-d H:i:s") ;
try {
$pdo->beginTransaction();
$sql = 'INSERT INTO order(syain,syohinmei,kingaku,timestamp) VALUES("'.$syain.'","'.$syohinmei.'",'.$kingaku.',"'.$timestamp.'")';
$stmh = $pdo->prepare($sql);
$stmh->bindValue(':syain',$syain,PDO::PARAM_STR);
$stmh->bindValue(':syohinmei',$syohinme,PDO::PARAM_STR);
$stmh->bindValue(':kingaku',$kingaku,PDO::PARAM_INT);
$stmh->bindValue(':timestamp',$timestamp,PDO::PARAM_STR);
$stmh->execute();
$pdo->commit();
print "データを更新しました。<br>";
} catch (PDOException $Exception) {
$pdo->rollBack();
print "エラー:" . $Exception->getMessage();
}
?>
エラーは以下の通りです。
エラー:SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order(syain,syohinmei,kingaku,timestamp) VALUES("中川","サンマ弁当",450,"' at line 1
Syntax error なので、コマンドの間違えなのだろうと思いますが、解決できません。
同じことを二回してますが、片方ずつでやってもダメなので、色々試してます。
よろしくお願いします。
お礼
回答ありがとうございます。 教えていただいた情報を参考にしているのでが、SQL Serverへの接続ができなくて、実績のある方にコード例を聞けばヒントがあるかと思ったのですが。。。ネットで探してもODBC接続の例がなくて試行錯誤してます。
補足
ODBC接続で成功いたしました。 最終的にSQL Server側の認証モードを混合モード(もともとはWindows認 証のみ)に変更し、以下のdsn情報で成功しました。 以下dsnの内容(dsnを外部ファイルとして、uri:file//~で利用) odbc:DRIVER=SQL Server;UID=sql serverのユーザID;PWD=sql serverのパスワード;DATABASE=データベース名;SERVER=サーバ名 $db=new PDO("uri:file://dsnファイルのへのパス") 本当のところ、SQL Serverへの接続はWindows認証モードで利用したかったのですが、とりあえずこれでいろいろと試してみます。