ホームページ  >  記事  >  バックエンド開発  >  php の SQL ステートメントが長すぎます。デバッグ中に、SQL ステートメントが不完全になっていることがわかりました。

php の SQL ステートメントが長すぎます。デバッグ中に、SQL ステートメントが不完全になっていることがわかりました。

WBOY
WBOYオリジナル
2016-06-23 13:56:512357ブラウズ

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 你牛。。。

不就一千多点、应该不会有问题的、可能性你粘甙了
建议:

1、数值字段不要 NULL 而して NOT NULL

2、用这个查询创建一視图




これは長いものではありません、すべてはデータベースですので、この文書を入手しました。

1000 ポイントを超えるべきではありません。問題はありません。貼り付け方が間違っている可能性があります

提案:
1. 数値フィールドには NULL を使用しないでください。ただし、NULL は使用しないでください
2. このクエリを使用して、ビューを作成します


私はデバッグ中に、挿入された文字列が不完全であることがわかりました。理由は何ですか? null 以外に設定する必要がありますが、バグを修正しているため、データベースを変更できません。ビューを試してみます。

理由もなく切り捨てられることはありません。ご自身で慎重にデバッグしてください。


えー。 。 。こんなに長い SQL は見たことがありません。素晴らしいです。 。 。


これは長くはありませんが、データベースが無理があるため、このように書かなければならないため、すべてナンセンスです。
そうですね、var_dump で出力される文字は限られていますので、この 2 つのシンボルが正しく接続されているかどうかを確認してください。 、貼り付け方が間違っている可能性があります

提案:

1. 数値フィールドには NULL を使用しないでください。ただし、NULL は使用しないでください

2. このクエリを使用してビューを作成します

デバッグ中に挿入された文字列が不完全であることがわかりました。理由は null ではないはずですが、バグを修正しているため、ビューを変更できません


文字列変数を定義し、長さが 1024 を超える SQL ステートメントを割り当てました。はい、不完全な値です。改善できる点はありますか? 誰かが私と同じ問題を抱えています:


いいえ、理由もなく切り捨てられていますので、慎重にデバッグしてください。

これはデバッグの結果です。前に SQL ステートメントが定義されており、結果はこのようになり、1024 だけが返されます。


これはナンセンスなので、このように書く必要があります。 、これら 2 つのシンボルが " ' であるかどうかを確認してください。結合が間違っています

いいえ、いいえ、そこに SQL ステートメントが定義されており、ID を結合してデバッグしたところ、SQL がインターセプトされ、1024 のみであることが判明しました残されました。


初めて見たとき、途中に中国語が挿入されていることに気づきませんでした...


私と同じ問題を抱えている人がいます: http://bbs.phpchina.com/ thread-163748-1-1.html


でも、その人はすでにこう言いませんでしたか: 解決しました。 xdeubg のバグ。プログラムには影響しません。
? あなたもそうですか?

初めて見たとき、途中に中国語が挿入されていることに気づきませんでした...

まあ、見逃したのは私のタイポグラフィーのスキルです。

私と同じ問題を抱えている人がいます: http://bbs.phpchina.com/thread-163748-1-1.html
でも、その人はすでにこう言いませんでしたか:

それは解決されました。 xdeubg のバグ。プログラムには影響しません。

あなたもそうですか?


php.ini の xdebug 設定をコメントアウトしましたが、まだ機能しません。

つまり、まだ xdebug を使用していましたよね?


PHP ではクエリ文字列の長さに制限はありません。これは、insert コマンド



を使用してテーブルに記事を挿入することで反映できます。 。 。こんなに長い SQL は見たことがありません。素晴らしいです。 。 。

これは長くはありませんが、データベースが無理があるため、このように書かなければならないため、すべてナンセンスです。

さて、var_dump によって出力される文字は制限されています。エコーしましたか? これら 2 つのシンボルが正しく結合されているかどうかを確認してください

いいえ、SQL ステートメントがそこで定義されており、その後に SQL が続きます。デバッグ中にインターセプトされたことが判明し、1024 だけが残りました。


xdubug var_dump は自動的に切り捨てられますが、xdebug をオフにしてみてください。


php はクエリ文字列の長さを制限しません。これは、insert コマンドを使用してテーブルに記事を挿入することで確認できます


はい、デバッグを使用しましたが、php でデバッグ設定をコメントした後でも、 .ini、まだ動作しません

クエリは空でしたか、SQL ステートメント エラーを返しましたか?先ほど空であることが判明したと言いましたが、切り詰められた SQL はエラーを報告する必要があります。これを最初に確認する必要がありますか?

LZがエコーすると残るのはこれだけ? ?

もしそうなら、このステートメントを表に書き込むことをお勧めします。

クエリは空でしたか、SQL ステートメント エラーを返しましたか?先ほど空であることが判明したと言いましたが、切り詰められた SQL はエラーを報告する必要があります。これを最初に確認する必要がありますか?


こんにちは、ありがとうございます。ここで空であることがわかります。ただし、同じクエリ ステートメントには結果セットがあります。また、エラーを報告する必要があると思います。しかし、私はphpについてあまり知りません。さらに、前の SQL ステートメントには、プログラム内でクエリを実行すると結果が返されます。しかし、navicat でクエリを実行すると、エラーが発生します。これらすべても私には不思議です。

着陸Zが響くと残るのはこれだけ? ?

もしそうなら、このステートメントを表に書き込むことをお勧めします。


どういう意味ですか?それを表に書き込むにはどうすればよいでしょうか?

これは xdebug のバグです。デバッグ中は 1024 バイトしか表示できませんが、SQL ステートメントを出力するとすべてが表示されます。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。