複数の 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');"
複数の命令を同時に実行できる場合、
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 拡張機能を使用することが最良の選択です