SQL Server(v8.00.2039 SP4 Standard Edition)データベースに接続するODBC(v2000.86.359.00)とのpdo接続があります。 ()($ smt-から>のerrorInfo)を日付パラメータをプリペアドステートメントにバインドするときのエラー - PHP PDO/ODBCとSQL Serverの使用
$sql = 'INSERT into AssetHistory
(AssetID, DateDue)
Values(:id, :duedate);';
$input = array(':id'=>486, ':duedate'=>'June 27, 2012');
$smt = $db->prepare($sql);
$smt->execute($input);
私はこのエラーを取得する:
$id = 486;
$duedate = 'June 27, 2012';
$query ="INSERT into AssetHistory (AssetID, DateDue) Values($id, $duedate);";
$noParams = $db->exec($query);
$db->query($query);
をしかし、私はこのように準備されたステートメントを使用しようとした場合:
これは動作します
"[Microsoft][ODBC Driver Manager] Function sequence error (SQLExecute[0] at ext\pdo_odbc\odbc_stmt.c:254)"
私は試しました: 1)囲み:二重引用符で一重引用符 2)バインドUnixタイムスタンプの整数 〜3日)結合:PHPのDateTimeオブジェクト 4にduedateを)私は$ DB-> queryメソッドを使用して入力を消毒立ち往生される可能性があります。この時点で
を準備する前に、SQL文の中にだけ$ duedateを挿入私ができる限り最高ですが、私は本当に何か提案を感謝します。
Windows Server 2003のボックスでPHP 5.38を使用しています。
更新: この質問の以前のバージョンからいくつかの変数を削除しました。エラーメッセージは変更されましたが、最終結果は同じです。
私もそうのようなパラメータバインディングを手動試してみた:そのようなSQLに変換する機能を追加するとともに
$smt->bindValue(':id', 486, PDO::PARAM_INT);
$smt->bindValue(':duedate', 'June 27, 2012', PDO::PARAM_STR);
を:
返し$sql = 'INSERT into AssetHistory
(AssetID, DateDue)
Values(:id, convert(datetime,:duedate, 100));';
: 「COUNTフィールドを間違ってまたは構文エラー "
そして、私はSQL ServerがUNIXのタイムスタンプ付きのplay niceではないことに気付きました。
「duedate」には何が含まれていますか? –
フォーマットされた日付の文字列 - 2012年6月27日と '2012-06-27 00:00.000'を試しました –
長い形式を試してみましたか?$ smt-> bindValue( ':duedate' 、$ duedate、PDO :: PARAM_INT); '?または、 '$ duedate = intval($ duedate);をキャストします; – Wrikken