2013-08-05 35 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