Php 致命错误:未捕获异常';PDO异常';带有消息';SQLSTATE[42000]
我正在从普通SQL迁移到PDO,因为我让我的一个朋友测试我是否有任何弱点,他建议我使用PDO,因为他发现了很多弱点 下面是我的全部错误: 致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与MySQL服务器版本相对应的手册,以获得第54行中“in/home/ubuntu/workspace/post.php”附近使用的正确语法 (!)PDOException:SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解使用接近“”的正确语法?(Php 致命错误:未捕获异常';PDO异常';带有消息';SQLSTATE[42000],php,mysql,pdo,Php,Mysql,Pdo,我正在从普通SQL迁移到PDO,因为我让我的一个朋友测试我是否有任何弱点,他建议我使用PDO,因为他发现了很多弱点 下面是我的全部错误: 致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与MySQL服务器版本相对应的手册,以获得第54行中“in/home/ubuntu/workspace/post.php”附近使用的正确语法 (!)PDOException:SQLSTATE[42000]:语法错误或访
id
,title
,info\u bys
,info\u shorts
,info\u longs
,email
,”在第54行的/home/ubuntu/workspace/post.php的第1行
这是我的代码:
$stmt = $db->prepare("INSERT INTO :portal
(`id`, `title`, `info_bys`, `info_shorts`, `info_longs`, `email`, `filename`, `filepath`, `filename2`, `filepath2`, `approved`)
VALUES ('', ':title', ':by_information', ':short', ':long_information', ':email', ':filename', ':filetarget', ':filename2', ':filetarget2', 'false'");
$stmt->execute(array(':portal' => $portal, ':title' => $title, ':by_information' => $by_information, ':short' => $short, ':long_information' => $long_information, ':email' => $email, ':filename' => $fileName, ':filetarget' => $fileTarget, ':filename2' => $fileName2, ':filetarget2' => $fileTarget ));
echo $affected_rows.' were affected';
是否有我不能在PDO中使用的东西可以在SQL中使用,或者我只是输入了错误的东西
希望有人能帮忙
编辑:
新代码:
function buildQuery( $get_var )
{
switch($get_var)
{
case 1:
$portal = $_POST['portal'];
break;
}
$stmt = $db->prepare("INSERT INTO :portal
(`id`, `title`, `info_bys`, `info_shorts`, `info_longs`, `email`, `filename`, `filepath`, `filename2`, `filepath2`, `approved`)
VALUES (:title, :by_information, :short, :long_information, :email, :filename, :filetarget, :filename2, :filetarget2, 'false'");
$stmt->execute(array(':portal' => $portal, ':title' => $title, ':by_information' => $by_information, ':short' => $short, ':long_information' => $long_information, ':email' => $email, ':filename' => $fileName, ':filetarget' => $fileTarget, ':filename2' => $fileName2, ':filetarget2' => $fileTarget ));
echo $affected_rows.' were affected';
}
守则有三个问题:
PDO::param_STR
),则值会用单引号双引号引起来。请改为:
`VALUES ('', :title, :by_information, :short, ....");`
“插入表格(标题,…”
另外,backticks(``)用于让数据库驱动程序知道您正在使用此值,并且不会用作保留关键字。换句话说,在该查询中完全过时。表名无法绑定。您可以创建一个白名单,然后将其与之进行比较。哦,是的,我明白了。我只是个傻瓜。ThanksIt不会返回任何错误,但是它没有给我设置的文本,这是:echo$infected_rows.'were infected';@RikNijdeken将问题更新为您的新代码。@RikNijdeken
:portal
仍然需要是$portal
,在传入之前应该进行检查。id
不应该传入,您应该给出已批准的一份声明false
@RikNijdeken“插入$portal(`title`,…”;
@RikNijdeken$infected\u行定义在哪里?什么是$\u POST['portal']
?