在php的swoole websocket服务端的onMessage回调函数中执行这条命令,结果数据库里面的内容完全和sql指定的不符合。
下面是这张表的DDL
CREATE TABLE `gobang_rooms` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`black_uid` int(10) unsigned DEFAULT NULL,
`black_seconds` mediumint(5) unsigned DEFAULT NULL COMMENT '黑方读秒',
`white_uid` int(10) unsigned DEFAULT NULL,
`white_seconds` mediumint(5) unsigned DEFAULT NULL,
`last_player` tinyint(3) unsigned DEFAULT NULL,
`create_time` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MEMORY AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
下面是update函数的实现
function update($sql, $params) {
// var_dump($params);
$pdo = new PDO(dsn, user, pass);
$stmt = $pdo->prepare($sql);
foreach ($params as $key => $value) {
$stmt->bindParam($key + 1, $value);
}
return $stmt->execute();
}
这个update函数我在别的地方执行一切正常,就在这里执行出问题了,结果和语句传入的值不符合,请问这是怎么回事?
在循环里要慎用bindParam,你看下手册函数原型,
可以看到,第二个参数是引用,也就是你传递的这那参数,之前的值都会变成最近一次传参的那个值。
你上图里绑定的,自然都会变成123456,
last_player
会溢出,所以是255了。鸟哥的一篇博文里有提到过这个问题: http://www.laruence.com/2012/...
foreach
里的$value
改为&$value