node-mysql 1つのクエリで複数のステートメントを使用する。
2023-09-12 18:05:32
質問
私は
nodejs 10.26
+
express 3.5
+
node-mysql 2.1.1
+
MySQL-Server Version: 5.6.16
.
4つのDELETEがあり、1つのDatabase Requestだけが欲しいので、DELETEコマンドを";"で接続しましたが、常に失敗します。
var sql_string = "DELETE FROM user_tables WHERE name = 'Testbase';";
sql_string += "DELETE FROM user_tables_structure WHERE parent_table_name = 'Testbase';";
sql_string += "DELETE FROM user_tables_rules WHERE parent_table_name = 'Testbase';";
sql_string += "DELETE FROM user_tables_columns WHERE parent_table_name = 'Testbase';";
connection.query(sql_string, function(err, rows, fields) {
if (err) throw err;
res.send('true');
});
このようなエラーを投げます。
Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELETE FROM user_tables_structure WHERE parent_table_name = 'Testbase';DELETE FR' at line 1
しかし、私はPhpMyAdminにこのSQLを貼り付けると、それは常に成功している...
単一クエリで書いても成功します。
connection.query("DELETE FROM user_tables WHERE name = 'Testbase'", function(err, rows, fields) {
if (err) throw err;
connection.query("DELETE FROM user_tables_structure WHERE parent_table_name = 'Testbase'", function(err, rows, fields) {
if (err) throw err;
connection.query("DELETE FROM user_tables_rules WHERE parent_table_name = 'Testbase'", function(err, rows, fields) {
if (err) throw err;
connection.query("DELETE FROM user_tables_columns WHERE parent_table_name = 'Testbase'", function(err, rows, fields) {
if (err) throw err;
res.send('true');
});
});
});
});
ありがとうございました。
どのように解決するのですか?
おそらく ノードミスクル . ( でも動作するはずです。 ノードマイスクリプト2 )
この docs は言う。
複数のステートメントをサポートすることは、セキュリティ上の理由から無効になっています。 値が適切にエスケープされていない場合、SQLインジェクション攻撃を受ける可能性があります)。
複数ステートメントクエリ
この機能を使用するには、接続のためにこの機能を有効にする必要があります。
var connection = mysql.createConnection({multipleStatements: true});
有効にすると、各ステートメントをセミコロンで区切ることにより、複数のステートメントを持つクエリを実行できます。
;
. 結果は各ステートメントに対応する配列になります。
例
connection.query('SELECT ?; SELECT ?', [1, 2], function(err, results) {
if (err) throw err;
// `results` is an array with one element for every statement in the query:
console.log(results[0]); // [{1: 1}]
console.log(results[1]); // [{2: 2}]
});
というわけで、もしあなたが
multipleStatements
を有効にした場合、最初のコードは動作するはずです。
関連
-
[解決済み] [GROUP BY句に含まれるか、集約関数で使用される必要があります。
-
[解決済み] MySQLでdatetimeとtimestampのどちらのデータ型を使用すべきですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] MySQLのAUTO_INCREMENTをリセットする方法
-
[解決済み] Node.js上のExpress.jsでGET(クエリ文字列)変数を取得する方法とは?
-
[解決済み] MySQLの複数行を1つのフィールドに連結することはできますか?
-
[解決済み] MySQLのクエリ結果をCSV形式で出力するにはどうすればよいですか?
-
[解決済み】VARCHARからINTへのキャスト - MySQL
-
[解決済み】MySQL LEFT JOINで行を削除する。
-
[解決済み】MySQLの "NOT IN "クエリ
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
MySQLとOracleの一括挿入SQLの汎用的な記述例
-
mysqlのデータ圧縮性能比較 詳細
-
MySQLによる既存テーブルのパーティショニングの実装
-
MysqlからElasticsearchにデータを同期させる方法を説明します。
-
MySQLデータベースで数百万件のデータを10秒間で挿入
-
SQLステートメントエラーです。オペランドには 1 つのカラムを含める必要があります [括弧を追加せずに複数のフィールドをクエリする
-
SQL Server のトランザクションは、try キャッチに記述しなければ、中間ステートメントがエラーを報告してもコミットされます。
-
[解決済み] mysqladminのフラッシュホストでブロックを解除する方法
-
[解決済み] MySQLのプロセスリストを見つけ、それらのプロセスを終了させる方法は?
-
[解決済み] SQLでカラムに最大値を持つ行のみを選択する [重複]。