2013-08-05 58 views
0

我正在學習PDO並準備好語句並遇到問題。我不斷收到此錯誤:PHP PDO投擲致命錯誤1064

Fatal error: Uncaught exception 'PDOException' with message '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 ''Users' WHERE 
Username = 'yayu'' at line 1' in /home/u230594705/public_html/pages/panel.php:33 Stack 
trace:#0 /home/u230594705/public_html/pages/panel.php(33): PDOStatement->execute(Array) #1 
{main} thrown in /home/u230594705/public_html/pages/panel.php on line 33 

與此代碼:

session_start(); 

$user = $_SESSION["user"]; 
$table = "Users"; 

//Establish Connection 
$dsn = "mysql:host=$dbHost;dbname=$dbName;charset=utf8"; 
$opt = array(
     PDO::ATTR_ERRMODE   => PDO::ERRMODE_EXCEPTION, 
     PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC 
     ); 
$pdo = new PDO($dsn,$dbUser,$dbPass, $opt); 

//Prepare query to execute 
$stmt = $pdo->prepare("SELECT Username, Password, Email FROM ? WHERE Username = ?"); 

$stmt->execute(array($table, $user)); 
$row = $stmt->fetch(); 

//Check 
echo $row['Username']; 

任何幫助,將不勝感激!

回答

0

您無法爲表名稱和列名指定參數。

更改$stmt喜歡如下:

$stmt = $pdo->prepare("SELECT Username, Password, Email FROM $table WHERE Username = ?"); 

而且你execute如下:

$stmt->execute(array($user)); 

這裏是一個很好的解釋爲什麼你不能指定表名或列名參數: http://www.php.net/manual/en/pdo.prepare.php#111977

+0

非常感謝!請問爲什麼你不能使用表名參數? – neby

+0

@yayu,我在回答中添加了一個鏈接,請參閱。 – vee

+0

再次感謝!我明白更好。 – neby