ホームページ  >  記事  >  バックエンド開発  >  複数の SQL ステートメントを実行すると PHP エラーが発生する

複数の SQL ステートメントを実行すると PHP エラーが発生する

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

複数の SQL ステートメントを実行するステートメントは、ローカルおよびコマンド ラインで通常どおり実行できますが、サーバー上に配置された後はエラーが報告されます。 thinkphpを使用しましたが、ローカルコードとサーバーコードは同じです
PHPまたはmysqlの設定に問題があると推測しましたが、見つかりませんでした。
SQL ステートメントの長さを増やします (a をいくつか入力します)。エラー内容は同じになります。単一の SQL ステートメントの実行は、その長さに関係なく正常に実行できます。

$sql="INSERT INTO gongzhonghao.response (receive,response) VALUES ('aaaaaaaaaaaaaa','aa');私は
NSERT INTO gongzhonghao.response (receive,response) VALUES ('bb','bb');
INSERT INTO gongzhonghao.response (receive,response) VALUES ('cc','cc');"
M()->execute($sql);
エラーレポート:
コマンドライン:


ディスカッションへの返信(解決策)

pdoで再度試してみたところ、正常に実行できました。 thinkphpに問題があるようです。ただし、ローカル コードとサーバー コードは、アップロードされたばかりの TP のコア コードを含め、まったく同じです。誰か助けていただけますか。

use は一度に 1 つの SQL ステートメントのみを実行できます

SQL 攻撃を防ぐため、PHP のデータベース クエリ関数では一度に複数の命令を実行することはできません
これは完全にセキュリティ上の理由からです。例外として、mysqli_multi_query は実行できます。複数の命令が実行されます
PDO は OK だと言いましたが、私はテストしていないのでコメントしません

複数の挿入命令は次のように記述できます
$sql="INSERT INTO gongzhonghao.response (receive,response) VALUES ('aaaaaaaaaaaa' ,'aa'),('bb','bb'),('cc','cc');"

上記の 3 つの文を $sql="INSERT INTO gongzhonghao.response (受信) に統合します,response ) VALUES ('aaaaaaaaaaaaaa','aa'),('bb','bb'),('cc','cc');"

SQL 攻撃を防ぐために、PHP のデータベース クエリ関数では、複数の命令を一度に実行する
これは完全に安全のためです。例外として、mysqli_multi_query は複数の命令を実行できます
PDO は大丈夫だと言いましたが、私はテストしていないのでコメントしません

複数の挿入命令は、このように書かれました
$sql="INSERT INTO gongzhonghao.response (receive,response) VALUES ('aaaaaaaaaaaaaa','aa'),('bb','bb'),('cc','cc'); "



上記の 3 つの文を $sql="INSERT INTO gongzhonghao.response (receive,response) VALUES ('aaaaaaaaaaaaaa','aa'),('bb','bb'),('cc' に統合します,'cc');"



元のビジネス設計では、挿入、削除、更新など、複数の異なる SQL ステートメントを一度に実行する必要がありました。上記の例では、挿入のみが使用されました。もちろん別々に実行することも可能ですが、効率は上げたいけどセキュリティ上の問題が発生するなら忘れてください。

複数の命令を同時に実行できる場合、
select * from tbl_name where id=$id
select * from tbl_name where id= 1; delete from tbl_name
If $i = '1; が改ざんされる可能性があります。 delete form tbl_name';

もちろん、渡されるパラメータを厳密に制御できるのであれば、一度に複数の命令を実行することは悪い考えではありません
mysqli_multi_query はこの要件に合わせて特別に設計されています

php5.5 以降、mysql拡張機能は非推奨のリストに含まれているため、mysqli 拡張機能を使用することが最良の選択です

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