無論我改變什麼,我都會繼續運行此代碼並獲取相同的錯誤。SQL錯誤檢索數據
require('common.php');
$charname = $_SESSION['user']['username'];
$query = "SELECT group, guild, username, class, level
FROM DD_users
WHERE username = '".$charname."'";
try
{
// These two statements run the query against your database table.
$stmt = $db->prepare($query);
$stmt->execute();
}
catch(PDOException $ex)
{
// Note: On a production website, you should not output $ex->getMessage().
// It may provide an attacker with helpful information about your code.
die("Failed to run query: " . $ex->getMessage());
}
// Finally, we can retrieve all of the found rows into an array using fetchAll
$rows = $stmt->fetchAll();
//print_r($rows);
$group = $rows['0']['adminaccess'];
$guild = $rows['0']['guild'];
$username = $rows['0']['username'];
$class = $rows['0']['class'];
$level = $rows['0']['level'];
它返回該錯誤
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'group, guild, username, class, level FROM DD_users ' at line 1
而且很顯然,我需要更多的文字可以編輯這個...
如果您打算構建像這樣的查詢,那麼不要浪費資源來使用預處理語句,只需要使用'$ db-> query()'。更不用說,通過使用佔位符的準備語句,您實際上可以防止您在嘗試自行構造查詢字符串時可能面臨的一些嚴重安全問題。 – brezanac
我誠實地從登錄指南得到這個。你說我現在的代碼更安全,然後只是執行'$ db-> query()'?如果是這樣,那麼我認爲使用一點資源會降低安全性會更好。我的意思是,它只會是一個非常小的網站,無論如何都是電腦文盲,因此無論如何別人會試圖破解它。 – Matt
不是因爲你正在使用'prepare()',而是你沒有使用它實際上應該使用的東西。如果你有簡單的查詢,不需要使用'$ charname'等外部參數,你可以使用query(),但是如果你需要提供參數,你應該通過'bindParam()'使用參數綁定,或者直接提供參數爲一個數組到'execute()'。長話短說有人已經回答了這個問題,同時提供了一個關於我想說的話的例子。 – brezanac