【问题标题】:What did I do wrong? (PHP prepare statement)我做错了什么? (PHP 准备语句)
【发布时间】: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-&gt;execute()){trigger_error("there was an error....".$conn-&gt;error, E_USER_WARNING);}替换$stmt-&gt;execute();
  • 是的.. 那些[$i] 在那里做什么?
  • 那么你有 wp_plugin_development.wp_userswp_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


【解决方案1】:

我想通了!

最初,我把准备语句的代码和执行它的代码放在一起。 preparebind_param 需要放在 $i 自动增量之前。 execute 需要放在 $i 自动增量之后。这是有效的代码:

$i = 0;
//using $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;
$stmt = $conn->prepare("UPDATE `wp_plugin_development`.`wp_users` SET `user_pass` = ? WHERE `user_login` = ?");
$stmt->bind_param('ss', $user_password[$i], $user_login[$i]);
        }
    }  
$i++; 
if(!$stmt->execute()){trigger_error("there was an error....".$conn->error, E_USER_WARNING);}
}

感谢大家的意见!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    • 2010-10-23
    • 1970-01-01
    • 2021-09-17
    相关资源
    最近更新 更多