简体   繁体   English

PHP PDO引发致命错误1064

[英]PHP PDO throwing Fatal error 1064

I'm learning about PDO and prepared statements and have run into a problem. 我正在学习PDO和准备好的语句,并且遇到了问题。 I keep getting this error: 我不断收到此错误:

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

with this code: 使用此代码:

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'];

Any help would be appreciated! 任何帮助,将不胜感激!

You cannot specify parameter for table name and column names. 您不能为表名和列名指定参数。

Change your $stmt like follows: 如下更改您的$stmt

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

And your execute as follows: 然后execute如下:

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

Here is a good explanation why you cannot specify parameter for table names or column names: http://www.php.net/manual/en/pdo.prepare.php#111977 这是一个很好的解释,为什么您不能为表名或列名指定参数: http : //www.php.net/manual/zh/pdo.prepare.php#111977

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM