簡體   English   中英

出現錯誤“'字段列表'中的未知列'文本'”

[英]Getting error "Unknown column 'text' in 'field list'"

我正在嘗試將文本插入到我的數據庫表reqviews 但我收到錯誤消息:

Unknown column 'text' in 'field list' 我不確定我的代碼有什么問題。 請幫忙

if (isset($_POST['combut'])) {
    $rqvcom = $_POST['rqvcom'];
    $rqid = (int)$_GET['rqid'];
    $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
    ");
}

我的代碼做什么:當一些文字鍵入到rqvcom文本區域,該文本被iserted到rqvcom在列reqviews表。 如果在reqviews表中已經存在具有rqvuserid用戶的行,則不能插入具有相同用戶 ID 的另一行。 我的問題是我的代碼給了我提供的錯誤信息。

編輯:表reqviews

rqvid | rqvrqid | rqvuserid | rqvcom | rqvdate

requests

rqid
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()

這就是您收到該錯誤的原因。 這極不可能是您想要的。 我懷疑您真正想要的是選擇列rqidsidrqvcom

SELECT rqid, sid, rqvcom, NOW()

編輯:現在您已經添加了您的表結構,您似乎更有可能想要實際選擇字符串值,在這種情況下,您需要將變量用引號括起來,如@Giacomo M 建議:

SELECT '{$rqid}', '{$sid}', '{$rqvcom}', NOW()

// which will become:
SELECT 'text', 'session123', 'example', NOW()

那么您的數據庫不會將字符串與列名混淆。

如果您嘗試將$rqvcom的值插入數據庫,則需要將其放在引號中,因為它是一個字符串。 否則,它被視為列名。

$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
");

但是,這會讓您容易受到 SQL 注入的影響,因此您應該使用准備好的語句。

$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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM