1

PHP 5.3 で PDO の問題があります。データベース用に MaxDB 7.8 を実行しています。これは、紙の上では MySQL と接続されているオープンソースのエンタープライズ データベースですが、そのようなものではありません。

この問題が MaxDB によって引き起こされているかどうかはわかりませんが、言及したかったのです。

ODBC ドライバーを介して準備済みステートメントを使用すると、$data 配列値のいずれかが空の文字列である場合、クエリが失敗することがわかりました。たとえば、1 つの値が必須 ('title') で、2 つの値がオプション ('author'、'version') であるダイアログ ボックスがユーザーに表示されます。ユーザーがオプションの値のいずれかを入力しないことを選択した場合、その配列要素は == "" になります。この場合、$sth->execute($data) は失敗し、null エラーが発生します。

setAttribute コマンド re: Nulls を 3 つの設定すべてで試しました。$value == null { $value = ""; }...そして、私が記事で見つけた他の多くのことは、すべて役に立ちませんでした。空の値を "(none)" のような文字列に手動で置き換えると、クエリは機能します。

とにかく、ここに詳細があります:

$data:

Array ( [cust] => 1 [ftype] => 1 [title] => test [author] => [version] => [folder] => 0 [modified] => 1337394898 [content] => "this is test content" [status] => 1 [pages] => 1 )

$sql = "INSERT INTO FORMS (CUST, FTYPE, TITLE, AUTHOR, VERSION, FOLDER, MODIFIED, STATUS, CONTENT, PAGES) VALUES (:cust, :ftype, :title, :author, :version, :folder, :modified, :status, :content, :pages)";
$sth = $dbh->prepare($sql) or $this->error($sql, $dbh->errorInfo());
$sth->execute($data);

ご協力いただきありがとうございます。

4

1 に答える 1

0

何日も時間を失った後、私はこれをあきらめています。誰かが解決策を見つけたら、それを聞きたいのですが、先に進む必要があります.

これに対する私のダクトテープ/チキンワイヤーソリューションは、バインドされたパラメーターのリストから空の可能性のある値を削除し、それらをSQLステートメントの一部として含めることです。そうすれば、何かが「」に等しくなった場合でも、びっくりして爆発することはありません。

試してくれたすべての人に感謝します。

于 2012-05-19T12:33:16.230 に答える