【发布时间】:2015-06-18 01:29:12
【问题描述】:
我第一次使用准备功能,我让它部分工作。基本上,我将用户密码从一个数据库复制到另一个数据库(我正在制作的用于转移用户的 WordPress 插件的一部分)。该代码运行并完全符合我的要求,但仅适用于它在 wp_users 表中找到的第一个用户。我需要它继续为该表中的所有用户运行,以便他们都能转移密码。这是我在下面写的代码:
用于从原始数据库中获取用户密码(基本上,这会找到所有用户的密码并将它们放入一个数组中。我发布此代码只是为了上下文。此代码有效很好):
$i = 0;
//set $user_count-1 because $i needs to start at 0 to represent the indexes and it also prevents the statement from being looped an extra time.
while($i <= $user_count-1) {
if($result = $conn->query("SELECT * FROM wp_users")) {
if($count = $result->num_rows) {
//echo $count . ' users found.';
while($row = $result->fetch_object()) {
$user_password[] = $row->user_pass;
}
}
$i++;
}
检索索引值(这是我用来实际检索这些索引值并将它们放入 sql 查询的代码。就像我说的,它适用于第一个用户,但不是其他用户):
$stmt = $conn->prepare("UPDATE `wp_plugin_development`.`wp_users` SET `user_pass` = ? WHERE `wp_users`.`user_login` = ?");
$stmt->bind_param('ss', $user_password[$i], $user_login[$i]);
$stmt->execute();
我在想也许语法错误?我不知道。我希望我的问题足够清楚。感谢您的帮助!
【问题讨论】:
-
'ss'中的bind_param()是什么?你有两个?。但是你的绑定参数是三个。 -
用
if(!$stmt->execute()){trigger_error("there was an error....".$conn->error, E_USER_WARNING);}替换$stmt->execute(); -
是的.. 那些
[$i]在那里做什么? -
那么你有
wp_plugin_development.wp_users和wp_users.user_login坦率地说这很奇怪。这转化为“更新 table.column_x SET ... column_x.column_y”,这可能是它失败的原因和/或另一个原因。请翻阅手册进行更新dev.mysql.com/doc/refman/5.0/en/update.html -
不允许在 WHERE 子句中引用列别名,因为在执行 WHERE 子句时可能尚未确定列值。 - 这是什么我在 MySQL.com/Stack 上找到了
标签: php mysql sql wordpress prepared-statement