[英]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.