【发布时间】:2017-10-06 19:09:29
【问题描述】:
我不知道为什么,这个准备好的查询不起作用:以下 php 代码是正确的(没有任何警告或通知),但相应的数据没有更新。对于类似的更新,数据库已正确更新,但不适用于此表。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'On');
$pdo = new PDO('mysql:dbname=test;host=localhost', 'root', '');
$sql = 'UPDATE `ml_user` SET `username` = :username, `password` = :password, `email` = :email, `active` = :active, `last_login` = :last_login WHERE `id_user` = :id_user';
$sth = $pdo->prepare($sql);
var_dump($sth); // object(PDOStatement)#39 (1) { ["queryString"]=> string(165) "UPDATE `ml_user` SET `username` = :username, `password` = :password, `email` = :email, `active` = :active, `last_login` = :last_login WHERE `id_user` = :id_user" }
$datas = array(
':id_user' => 1, ':username' => 'my username',
':password' => 'ae25ff724d069dcb1a7fff05616ad6abc1',
':email' => 'username@example.com',
':active' => 1, ':last_login' => 1382990654,
);
$res = $sth->execute($datas);
var_dump($res); // bool(true)
sql表
CREATE TABLE `ml_user` (
`id_user` int(11) NOT NULL AUTO_INCREMENT,
`active` tinyint(1) NOT NULL DEFAULT '0',
`email` varchar(127) NOT NULL,
`username` varchar(32) NOT NULL DEFAULT '',
`password` char(50) NOT NULL,
`logins` int(10) unsigned NOT NULL DEFAULT '0',
`last_login` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id_user`),
UNIQUE KEY `uniq_username` (`username`),
UNIQUE KEY `uniq_email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
【问题讨论】:
-
你需要一个 : 在你的“数据”数组中的每个键前面吗?
-
不,有或没有 : ,相同的结果:没有错误
-
把它放在一个 try catch 块中
-
将 'username' => ':my username' 改为 ':username' => 'my username'
-
@Ryan,值得一提的是,在最新版本的 PHP 中,您可以将参数传递给 execute(),而无需在数组键中使用 ':' 前缀。以前需要它,但现在不需要了。