ホームページ >バックエンド開発 >PHPチュートリアル >php の SQL ステートメントが長すぎます。デバッグ中に、SQL ステートメントが不完全になっていることがわかりました。
PHP高手们,帮我解决一问题吧:
在php里定义了一条sql如下:
$sql = "SELECT * FROM p_info pi LEFT JOIN job j ON j.id = " 。 $id 。
"WHERE pi.requestid = 0
AND ((ifnull(pi.standard_20_ft_container, 0) - ifnull(j.standard_20_ft_container, 0)) <= 0)
AND ((ifnull(pi.standard_40_ft_container, 0) - ifnull( j.standard_40_ft_container, 0)) <= 0)
AND ((ifnull(pi.high_cube_40_ft_container, 0) - ifnull(j.high_cube_40_ft_container, 0)) <= 0)
AND ((ifnull(pi.capacity_head_of_cattle, 0) ) - ifnull(j.capacity_head_of_cattle, 0)) <= 0)
AND ((ifnull(pi.capacity_head_of_sheep, 0) - ifnull(j.capacity_head_of_sheep, 0)) <= 0)
AND ((ifnull(pi) .capacity_other_livestock, 0) - ifnull(j.capacity_other_livestock, 0)) <= 0)
AND ((ifnull(pi.capacity_number_of_horses, 0) - ifnull(j.capacity_number_of_horses, 0)) <= 0)
AND ( (ifnull(pi.fine_feed_kg, 0) - ifnull(j.carrying_capacity_kg, 0)) <= 0)
AND ((ifnull(pi.length_cm, 0) - ifnull(j.tray_length_cm, 0)) <= 0 )
AND ((ifnull(pi.width_cm, 0) - ifnull(j.tray_width_cm, 0)) <= 0)
AND ((ifnull(pi.height_cm, 0) - ifnull(j.max_load_height_cm, 0)) <= 0)
AND ((ifnull(pi.weight_kg, 0) - ifnull(j.carrying_capacity_kg, 0)) AND to_days(j.home_day1) <= to_days(str_to_date(pi.date1) , '%d/%m/%Y'))
AND to_days(str_to_date(pi.date2, '%d/%m/%Y')) <= to_days(j.home_day2)
ただし查询出的データ空,调式時間発行现,传到$query = mysql_query($sql);这里のsql语句变成蠷了:
SELECT * FROM p_info pi LEFT JOIN job j ON j.id = 734WHERE pi.requestid = 0
そして((ifnull(pi.standard_20_ft_container, 0) - ifnull(j.standard_20_ft_container, 0)) <= 0)
AND ((ifnull(pi.standard_40_ft_container, 0) - ifnull(j.standard_40_ft_container, 0)) <= 0)
AND ((ifnull(pi.high_cube_40_ft_container, 0) - ifnull(j.high_cube_40_ft_container, 0)) AND ((ifnull(pi.capacity_head_of_cattle, 0) - ifnull(j.capacity_head_of_cattle, 0) ) <= 0)
AND ((ifnull(pi.capacity_head_of_sheep, 0) - ifnull(j.capacity_head_of_sheep, 0)) AND ((ifnull(pi.capacity_other_livestock, 0) - ifnull(j. Capacity_other_livestock, 0)) <= 0)
AND ((ifnull(pi.capacity_number_of_horses, 0) - ifnull(j.capacity_number_of_horses, 0)) <= 0)
AND ((ifnull(pi.gran_feed_kg, 0) - ifnull(j.carrying_capacity_kg, 0)) <= 0)
AND ((ifnull(pi.length_cm, 0) - ifnull(j.tray_length_cm, 0)) AND ((ifnull(pi.width_cm) , 0) - ifnull(j.tray_width_cm, 0)) <= 0)
AND ((ifnull(pi.height_cm, 0) - ifnull(
外見似后面的就被截断了,データ库里运行这个sql是没问题)しかし、ここには問題があります、大家はこのような問題に遭遇しましたか?長い sql 你牛。。。
不就一千多点、应该不会有问题的、可能性你粘甙了
额
これは長いものではありません、すべてはデータベースですので、この文書を入手しました。
1000 ポイントを超えるべきではありません。問題はありません。貼り付け方が間違っている可能性があります
提案:
1. 数値フィールドには NULL を使用しないでください。ただし、NULL は使用しないでください
2. このクエリを使用して、ビューを作成します
理由もなく切り捨てられることはありません。ご自身で慎重にデバッグしてください。
えー。 。 。こんなに長い SQL は見たことがありません。素晴らしいです。 。 。
提案:
1. 数値フィールドには NULL を使用しないでください。ただし、NULL は使用しないでください
2. このクエリを使用してビューを作成します
デバッグ中に挿入された文字列が不完全であることがわかりました。理由は null ではないはずですが、バグを修正しているため、ビューを変更できません
文字列変数を定義し、長さが 1024 を超える SQL ステートメントを割り当てました。はい、不完全な値です。改善できる点はありますか? 誰かが私と同じ問題を抱えています:
いいえ、いいえ、そこに SQL ステートメントが定義されており、ID を結合してデバッグしたところ、SQL がインターセプトされ、1024 のみであることが判明しました残されました。
初めて見たとき、途中に中国語が挿入されていることに気づきませんでした...
私と同じ問題を抱えている人がいます: http://bbs.phpchina.com/ thread-163748-1-1.html
初めて見たとき、途中に中国語が挿入されていることに気づきませんでした...
まあ、見逃したのは私のタイポグラフィーのスキルです。
私と同じ問題を抱えている人がいます: http://bbs.phpchina.com/thread-163748-1-1.html
でも、その人はすでにこう言いませんでしたか:
?
あなたもそうですか?
つまり、まだ xdebug を使用していましたよね?
PHP ではクエリ文字列の長さに制限はありません。これは、insert コマンド
を使用してテーブルに記事を挿入することで反映できます。 。 。こんなに長い SQL は見たことがありません。素晴らしいです。 。 。
これは長くはありませんが、データベースが無理があるため、このように書かなければならないため、すべてナンセンスです。
さて、var_dump によって出力される文字は制限されています。エコーしましたか? これら 2 つのシンボルが正しく結合されているかどうかを確認してください
いいえ、SQL ステートメントがそこで定義されており、その後に SQL が続きます。デバッグ中にインターセプトされたことが判明し、1024 だけが残りました。
xdubug var_dump は自動的に切り捨てられますが、xdebug をオフにしてみてください。
php はクエリ文字列の長さを制限しません。これは、insert コマンドを使用してテーブルに記事を挿入することで確認できます
クエリは空でしたか、SQL ステートメント エラーを返しましたか?先ほど空であることが判明したと言いましたが、切り詰められた SQL はエラーを報告する必要があります。これを最初に確認する必要がありますか?
LZがエコーすると残るのはこれだけ? ?
もしそうなら、このステートメントを表に書き込むことをお勧めします。
クエリは空でしたか、SQL ステートメント エラーを返しましたか?先ほど空であることが判明したと言いましたが、切り詰められた SQL はエラーを報告する必要があります。これを最初に確認する必要がありますか?
着陸Zが響くと残るのはこれだけ? ?
もしそうなら、このステートメントを表に書き込むことをお勧めします。
これは xdebug のバグです。デバッグ中は 1024 バイトしか表示できませんが、SQL ステートメントを出力するとすべてが表示されます。