将用户对象传递给函数,然后传递给准备好的语句(PHP)

时间:2013-08-21 09:53:09

标签: php arrays object mysqli auto-increment

我是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-&gt; bind_param函数,并从数组中插入数据。

param_count = 10 and field_count = 0!

编辑!2!:

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

无论如何,谢谢你的回答。天儿真好!

1 个答案:

答案 0 :(得分:-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;
    }

}