2 回答

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超1個(gè)贊
SELECT {$rqid}, {$sid}, {$rqvcom}, NOW()
這將選擇這些變量中的列名:
// let's say these are the values in your variables:
$rqid = "text";
$sid = "session123";
$rqvcom = "example";
// then this query:
SELECT {$rqid}, {$sid}, {$rqvcom}, NOW()
// is the same as:
SELECT text, session123, example, NOW()
這就是您收到該錯(cuò)誤的原因。這極不可能是您想要的。我懷疑您真正想要的是選擇列rqid,sid并且rqvcom:
SELECT rqid, sid, rqvcom, NOW()
編輯:現(xiàn)在您已經(jīng)添加了表結(jié)構(gòu),您似乎更有可能想要實(shí)際選擇字符串值,在這種情況下,您需要將變量用引號(hào)括起來(lái),如@Giacomo M 建議:
SELECT '{$rqid}', '{$sid}', '{$rqvcom}', NOW()
// which will become:
SELECT 'text', 'session123', 'example', NOW()
那么您的數(shù)據(jù)庫(kù)將不會(huì)將字符串與列名混淆。

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
如果您嘗試將 的值$rqvcom插入數(shù)據(jù)庫(kù),則需要將其放在引號(hào)中,因?yàn)樗且粋€(gè)字符串。否則,它被視為列名。
$conn->query("
INSERT INTO reqviews (rqvrqid, rqvuserid, rqvcom, rqvdate)
SELECT {$rqid}, {$sid}, '{$rqvcom}', NOW()
FROM requests
WHERE EXISTS (
SELECT rqid
FROM requests
WHERE rqid = {$rqid})
AND NOT EXISTS (
SELECT rqvid
FROM reqviews
WHERE rqvuserid = {$sid}
AND rqvrqid = {$rqid})
LIMIT 1
");
但是,這會(huì)讓您容易受到 SQL 注入的影響,因此您應(yīng)該使用準(zhǔn)備好的語(yǔ)句。
$stmt = $conn->prepare("
INSERT INTO reqviews (rqvrqid, rqvuserid, rqvcom, rqvdate)
SELECT ?, ?, ?, NOW()
FROM requests
WHERE EXISTS (
SELECT rqid
FROM requests
WHERE rqid = ?)
AND NOT EXISTS (
SELECT rqvid
FROM reqviews
WHERE rqvuserid = ?
AND rqvrqid = ?)
LIMIT 1
");
$stmt->bind_param("iisiii", $rqid, $sid, $rqvcom, $rqid, $sid, $rqid);
$stmt->execute();
- 2 回答
- 0 關(guān)注
- 359 瀏覽
添加回答
舉報(bào)