【问题标题】:passing user object to function and then to prepared stament (PHP)将用户对象传递给函数,然后传递给准备好的语句(PHP)
【发布时间】:2013-08-23 15:18:44
【问题描述】:

我是 PHP 的新手,我正在使用 mysqli、OOP 和准备好的语句。

我的问题是这样的:

我正在尝试将用户(对象)传递给我的数据库(类)中的 Insert_user(func)。

我有 3 个类,“逻辑”、“数据”和“索引”。索引包括数据和逻辑,并发起

连接和用户。

在我的函数(insert_user)中,我使用一个数组将用户变量传递到,之前

绑定并执行我的声明。

她是我的代码:

<?php
function insert_user($user) {

    $query = "INSERT INTO user VALUES (?,?,?,?,?,?,?,?,?,?)";

    $binding = 'issssiisss'; 

    $variables = array( $user->user_id, $user->f_name, $user->l_name, $user->address,    $user->city, $user->zipcode, $user->mobile_number, $user->mail, $user->pass_key, $user->pass_word);

    $stmt = $this->mysqli->prepare($query);

    $stmt->bind_param($binding,$variables[0],$variables[1],$variables[2],$variables[3],$variables[4],$variables[5],$variables[6],$variables[7],$variables[8],$variables[9]);

    $stmt->execute();
}
?>

这是来自浏览器的 var_dump:

object(user)#1 (10) { ["user_id"]=> int(1) ["f_name"]=> string(5) "pelle" ["l_name"]=>     string(5) "kanin" ["address"]=> string(7) "vænget" ["city"]=> string(6) "aaaaaa" ["zipcode"]=> int(123) ["mobile_number"]=> int(123) ["mail"]=> string(4) "fedt" ["pass_key"]=> string(3) "ert" ["pass_word"]=> string(4) "erto" } 

string(10) "issssiisss" 

array(10) { [0]=> int(1) [1]=> string(5) "pelle" [2]=> string(5) "kanin" [3]=> string(7) "vænget" [4]=> string(6) "aaaaaa" [5]=> int(123) [6]=> int(123) [7]=> string(4) "fedt" [8]=> string(3) "ert" [9]=> string(4) "erto" } 

object(mysqli_stmt)#4 (10) { ["affected_rows"]=> int(-1) ["insert_id"]=> int(0) ["num_rows"]=> int(0) ["param_count"]=> int(10) ["field_count"]=> int(0) ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["sqlstate"]=> string(5) "00000" ["id"]=> int(1) } 

我做错了什么!?

谢谢。

编辑:问题是将数据插入数据库。它根本行不通。当我执行时没有数据被放入。

我认为问题在于 $stmt->bind_param 函数,并从数组中插入数据。

param_count = 10 和 field_count = 0!

编辑!2!:

好的。所以,它确实有效!我做错的是在我的 user_id 中指定一个整数值,即当我创建用户时。我的数据库对该值使用 AUTO.INCREMENT,因此它不起作用..

无论如何,谢谢你的回答。祝你好运!

【问题讨论】:

  • 我目前正在编写 php 中的“Easy MySQLi”类,您将在其中使用数组等上传数据,例如$emsql-&gt;upload('TableName', Array('n;user_id', 's;user_name=Administrator', 's;user_pass=Password12'));。现在n; 是NULL,s; 是String,i; 是Integer。如user_nameuser_pass 是表格中的列,= 之后的所有内容都是要上传的内容。此类使用准备好的语句。如果您想保持联系以获取更新,请发送邮件至 admin@theteamcoders.com 此域尚未建立网站,但邮件正在运行!

标签: php arrays object mysqli auto-increment


【解决方案1】:

在每个mysqli语句之后检查是否有任何错误以隔离错误:

$stmt = $this->mysqli->prepare($query);
if ( false===$stmt ) {
  die('prepare() failed: ' . htmlspecialchars($mysqli->error));
}    

$stmtBindResult = $stmt->bind_param($binding,$variables[0],$variables[1],$variables[2],$variables[3],$variables[4],$variables[5],$variables[6],$variables[7],$variables[8],$variables[9]);
if ( false===$stmtBindResult ) {
  die('bind_param() failed: ' . htmlspecialchars($stmt->error));
}
$stmtExecuteResult = $stmt->execute();
if ( false===$stmtExecuteResult ) {
  die('execute() failed: ' . htmlspecialchars($stmt->error));
}

否则,您可以使用基本 PDO。我会使用具有以下基本功能的 PDO 插入:

$Query = "INSERT INTO user VALUES (?,?,?,?,?,?,?,?,?,?)";
$Params = array($variables[0],$variables[1],$variables[2],$variables[3],$variables[4],$variables[5],$variables[6],$variables[7],$variables[8],$variables[9]);
$InsertResult = PDOInsert($Query, $Params);

function PDOInsert($Query, $Parameters)
{
    try 
    {
        $PDOConnection = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME.'', DB_USER, DB_PASS);
        $PDOConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $Statement = $PDOConnection->prepare($Query);
        foreach ($Parameters as $Key => $Val)
            $Statement->bindValue($Key+1, $Val);
        $Statement->execute();
        $PDOConnection = null;
        return true;
    } 
    catch(PDOException $e) 
    {
        die('ERROR: ' . $e->getMessage());
        return false;
    }

}

【讨论】:

  • 你不觉得这个array($variables[n] 的东西非常错误......多余吗?
  • 其实我有。理想情况下我会避免它,但我只是想举例说明我将如何开始......
  • 好吧,你的开始非常不一致。看来你需要更多的尝试才能做到正确
  • 注意点!但我不完全确定是什么样的不一致?
  • 1.每次要运行查询时都连接? 2.$Params = array($variables[0]...这是什么?如此繁琐的复制有何意义?你不能只使用 $variables 而不是 $params 吗? 3. 你不能把$variables 传递给execute() 吗? 4.die('ERROR: ' . $e-&gt;getMessage()); 是邪恶的。 5. $Params 不是 $Parameters.. 等等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-16
  • 1970-01-01
  • 2020-09-13
  • 2011-04-18
  • 1970-01-01
  • 1970-01-01
  • 2011-12-10
相关资源
最近更新 更多