将用户对象传递给函数,然后传递给prepared stant(PHP)


passing user object to function and then to prepared stament (PHP)

我是PHP的新手,我使用的是mysqli、OOP和prepared语句。

我的问题是:

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

我有三个类,"逻辑"、"数据"answers"索引"。索引包括数据和逻辑,并启动

连接和用户。

在我的函数(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!:

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

不管怎样,谢谢你的回答。G'day!

在每个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;
    }
}