簡體   English   中英

查詢在mysql中起作用,但在PHP中不起作用

[英]Query works in mysql but not in PHP

以下是我准備在表中插入的准備語句。 當我僅通過更改在mysql中運行相同的查詢時? 如果使用實際值,則查詢將成功運行,但不能在PHP中運行,並出現以下錯誤:

Call to a member function execute() on a non-object

請讓我知道我做錯了什么:

$stmt = $con->prepare("
    INSERT INTO test_given (
        test_id, test_giver, test_completed, dt_created
    )
    SELECT * FROM (
         SELECT ?, ?, '0',NOW()
    ) AS tmp
    WHERE NOT EXISTS (
        SELECT test_id FROM test_given WHERE test_id  = ? AND test_giver  = ?
    ) limit 1
");

// s means only string input is allowed 
$stmt->bind_param("ssss", $qid, $username,$qid, $username);

注意:我回顯了$ qid,$ username,它們得到正確的值。

你不能使用? 表名稱。 在SQL中,值看起來像"value" ,而表/列名看起來像` colname (反引號,不是單引號); 它們是不可互換的。

您可以使用sprintf並使用mysqli_escape_string手動對表名進行mysqli_escape_string ,即:

$stmt = $con->prepare(sprintf("
    INSERT INTO test_given (
        test_id, test_giver, test_completed, dt_created
    )
    SELECT * FROM (
         SELECT `%s`, `%s`, '0',NOW()
    ) AS tmp
    WHERE NOT EXISTS (
        SELECT test_id FROM test_given WHERE test_id  = ? AND test_giver  = ?
    ) limit 1
"), $qid, $username);

// s means only string input is allowed 
$stmt->bind_param("ss", $qid, $username);

暫無
暫無

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

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