0

我对 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,因此它不起作用..

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

4

1 回答 1

-2

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

}
于 2013-08-21T20:25:01.263 回答