为什么我会收到此SQL语法错误? - 语法错误或访问冲突:1064

时间:2015-03-27 09:05:43

标签: mysql sql syntax

为什么会出现此错误:SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中出错;检查与MySQL服务器版本对应的手册,以便在第1行的''附近使用正确的语法?

<?php
include'model.php';

global $db;
	try {
		$sql ='SELECT accounts.username '
		. 'FROM accounts '
		. 'WHERE accounts.username = '
		.$_POST[username];
		$stmt = $db->prepare($sql);
		$stmt->execute();
		$navList = $stmt->fetchAll();
		$stmt->closeCursor();

		header('location: ./view_cms.php');


	} catch (PDOException $exc) {
		 echo $exc->getMessage();
		// header('location: ./view_error.php');
		exit;
	}

	?>

1 个答案:

答案 0 :(得分:1)

因为您需要在WHERE子句中用单引号括起字符串。您还需要使用带引号的字符串键访问$_POST条目:

$sql = "SELECT accounts.username ".
       "FROM accounts ".
       "WHERE accounts.username = '".$_POST["username"]."'";

另外,这就是为什么基于PHP的网络软件名声不好的原因。为了天堂的缘故,消毒你的投入!您的prepare语句没有做任何事情,因为您没有使用参数(您的语句不是预备语句)。