PDO 查询不起作用,但生成的 SQL 在 PHPMyAdmin 上运行

Posted

技术标签:

【中文标题】PDO 查询不起作用,但生成的 SQL 在 PHPMyAdmin 上运行【英文标题】:PDO query doesnt work but generated SQL runs on PHPMyAdmin 【发布时间】:2014-07-21 02:55:16 【问题描述】:

我正在尝试运行以下 PDO 查询,但它根本不更新记录。如果我通过 phpMyAdmin 运行代码,它会运行良好并更新记录。

$dbhost = 'localhost';
$dbuser = 'general';
$dbpass = 'removed';
$dbname = 'removed';
try 
$dbo = new PDO('mysql:host=localhost;dbname='.$dbname, $dbuser, $dbpass);
catch (PDOException $e) 
print "Error!: " . $e->getMessage() . "<br/>";
die();

$query="UPDATE `soldier_info` SET `soldier_image`= '$soldier_image' WHERE `soldier_id`=" . $_POST['soldier_id'];
echo $query;
$q=$dbo->prepare($query);
$q->execute();

谁能告诉我我做错了什么?我没有看到任何错误消息回显或打印在页面上,当我回显 $query 时它显示:

UPDATE `soldier_info` SET `soldier_image`= 'http://www.bringingthemhome.co.uk/preview/images/soldiers/soldier1.jpg' WHERE `soldier_id`=4

如前所述,代码通过 PHPMyAdmin 运行良好

【问题讨论】:

“我没有看到任何错误消息” - 设置为 $dbo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 感谢@reg 告诉我我的用户无权更新! :) 菜鸟失误 【参考方案1】:

试试这个:

<?php
$dbhost = 'localhost';
$dbuser = 'general';
$dbpass = 'removed';
$dbname = 'removed';

try 
    $dbo = new PDO('mysql:host=localhost;dbname='.$dbname, $dbuser, $dbpass);
    $q = $dbo->prepare("UPDATE `soldier_info` SET `soldier_image`= :image WHERE `soldier_id`= :id");
    $q->execute(array(":image" => $soldier_image, :id" => $_POST['soldier_id']));
catch (PDOException $e) 
    print "Error!: " . $e->getMessage() . "<br/>";
    die();

?>

并确保 $soldier_image 已定义。

【讨论】:

谢谢@tanatos,我把它放在里面并没有完全解决我的问题,但它与 reg 的评论一起帮助:) 这是一个愚蠢的错误,因为用户没有更新权限!谢谢 没问题!很高兴我能帮忙:)

以上是关于PDO 查询不起作用,但生成的 SQL 在 PHPMyAdmin 上运行的主要内容,如果未能解决你的问题,请参考以下文章

PDO 准备语句限制不起作用 [重复]

PHP PDO MySQL可滚动游标不起作用

PDO SQL 我正在尝试将我的 SQL 查询设置为检查多个列,但它不起作用 [重复]

PHP:PDO foreach 不起作用

PHP MySql PDO 多次插入不起作用

CakePhp : Cake bake 在 Ubuntu 上不起作用。 (PDO异常)