仔細閱讀,我們有這個查詢,它在名為 的表中插入值users。對于值member_id,我們正在運行子查詢以從表 admin_users 中選擇成員的 ID。之所以有single quoteswith ,是因為我們試圖操縱查詢。此時第一個子查詢正常作業,但第二個子查詢發生了什么?
第二個子查詢pass從表中選擇settings,表settings和值pass完全存在并且只有一條記錄,但是 INSERT INTO 中的第二個查詢沒有回傳任何內容。當查詢 INSERT INTO 執行完成時,所有值都被正確存盤,除了最后插入 0 的注釋列。我不知道為什么,但如果你洗掉所有'' 它,它可以正常作業整個 sql 陳述句,但這次我們不能洗掉'' ,因為我們正在更改查詢。我需要解決這個問題。
INSERT INTO `users` (`username`,`password`,`number`,`member_id`,`exp_date`,`notes`) VALUES ('balvin','sjeneoeoe','3','' (select id from `admin_users` where username = 'TEST') '','1644622354','' (select pass from `settings`));#;');
我也嘗試過像這樣修改第二個子查詢,但它沒有用。
'' (select pass from `settings` LIMIT 1)
'' (select pass from `settings` GROUP BY pass LIMIT 1)
'' (select pass from `settings` where id = 1 LIMIT 1)
也許錯誤是設定中傳遞的列值的資料型別或用戶中的列注釋
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`member_id` int(11) DEFAULT NULL,
`username` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`password` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`exp_date` int(11) DEFAULT NULL,
`notes` mediumtext COLLATE utf8_unicode_ci NOT NULL,
`number` int(11) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
KEY `member_id` (`member_id`),
KEY `exp_date` (`exp_date`),
KEY `username` (`username`),
KEY `password` (`password`),
) ENGINE=InnoDB AUTO_INCREMENT=1702894 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
CREATE TABLE `settings` (
`id` int(11) NOT NULL,
`name` mediumtext COLLATE utf8_unicode_ci NOT NULL,
`pass` mediumtext COLLATE utf8_unicode_ci NOT NULL,
...
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
uj5u.com熱心網友回復:
將您的插入寫為select,而不是values。
未經測驗,但類似于:
INSERT INTO `users` (`username`,`password`,`number`,`member_id`,`exp_date`,`notes`)
select 'balvin','sjeneoeoe','3',
(select id from `admin_users` where username = 'TEST'),
'1644622354',
(select pass from `settings`);
注意每個子查詢必須回傳一行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/428635.html
