重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

お世話になります。
以前まで「mysql_query」でSQLを実行していたのをPDOで行うように変更しております。
prepareの「?」の部分までのSQLにした場合(1)、データ取得出来ますが
(2)ですとエラーも返ってこなくデータ取得出来ません。
色々と試してはいますが、全く出来なくて大変困っています。どうかご教示くださいませ。

1)SELECT * FROM table WHERE data_code = ? and data_code2 = ?

2)SELECT * FROM table WHERE data_code = ? and data_code2 = ? and (data_code3 = "null" or data_code3 is null or data_code3 = "")

※PHP5.3、MySQL5.0です。

A 回答 (3件)

その状況から考えるに、今までの mysql_query と PDO では null の評価の仕方が違うってことなんでしょうかね。



正直、どの段階で変換されるのか分かんないのですが、↓ここらへんを なんやかんやすると どうにかなるかもしれません。

PDO::setAttribute

PDO::ATTR_ORACLE_NULLS

http://php.net/manual/ja/pdo.setattribute.php

なんか これなら回答しないほうがいいんじゃないかぐらいのテキトーすぎる回答ですみません。
    • good
    • 0

PDOをやったことのない俺なら、とりあえず こう試してみて、どうなるかで その後を決めます。



1 . 徐々に条件を増やす。

SELECT * FROM table WHERE data_code = ? and data_code2 = ? and (data_code3 = "null")

SELECT * FROM table WHERE data_code = ? and data_code2 = ? and (data_code3 = "null" or data_code3 is null)

SELECT * FROM table WHERE data_code = ? and data_code2 = ? and (data_code3 = "null" or data_code3 is null or data_code3 = "")

2 . 後半の括弧を 更に括弧で括る。

SELECT * FROM table WHERE data_code = ? and data_code2 = ? and ((data_code3 = "null") or (data_code3 is null) or (data_code3 = ""))

まぁ、PDO自体 触ったことのない人間の戯言です。

この回答への補足

ありがとうございます。
仰るとおり条件を変えてみた結果、質問文の「1」しか取得出来ずこちらで問い合わせさせて頂いた経緯です。

補足日時:2013/05/22 18:54
    • good
    • 0

単に合致するデータが0件というオチはないですよね?


クォーテーションが競合したりはしていませんか?
(エラーをはいていないなら大丈夫かもしれませんが)

この回答への補足

ありがとうございます。
「mysql_query」ではデータが取得出来るので対象データが無いという事ではないのですが
エラーもはかないのでクォーテーションの関係ではないようです。
大変恐れ入りますが引き続き宜しくお願い致します。

補足日時:2013/05/22 13:55
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!