简体   繁体   English

PHP / MySQL的oop使用准备好的语句审查

[英]php/mysql oop using prepared statement review

I am trying to implement prepared statement but for some reason I am not able to create user. 我正在尝试执行准备好的语句,但是由于某种原因,我无法创建用户。 Note, I have already been able to create user with same values in the old tradition fation [mysql_connect and ...] Could some body help me identify where I am making my mistake? 注意,在旧的传统格式[mysql_connect and ...]中,我已经能够创建具有相同值的用户了。某些机构可以帮助我确定我在哪里犯错了吗?

require_once 'config.php';
class AuthDb {
private $db;
function __construct(){
    $this->db = mysqli(DB_SERVER, DB_USER, DB_PASS, DB_NAME) 
                or die('could not connect');        
}

function __destruct(){

    $this->db->close();
    unset($this->db);
}

public function createUser($name, $email) {

    $query = "INSERT INTO myUsers (name, email) VALUES (?, ?)";
    $stmt = $this->db->prepare($query); 
    $stmt->bind_param("ss", $name, $email);
    if ($stmt->execute()){
        return true;
    }

    return false;

  }

}

$create = new AuthDb();
$name = "bing";
$email = "banbang@yahoo.com"; 
$test = $create->createUser($name, $email);

Try it with more error handling/logging. 尝试使用更多错误处理/日志记录。

define('DEBUG_LOG', true);
function onError($general, $details) {
    echo '<pre>', htmlentities($general), "</pre>\n";
    if ( defined('DEBUG_LOG') && DEBUG_LOG ) {
        echo '<pre>', htmlentities($details), "</pre>\n";
        echo '<pre>'; debug_print_backtrace(); echo "</pre>\n";
    }
    die;
}

class AuthDb {
[...]
    public function createUser($name, $email) {
        $query = "INSERT INTO myUsers (name, email) VALUES (?, ?)";
        $stmt = $this->db->prepare($query);
        if ( !$stmt ) {
            onError('database error', $this->db->errno .': '.$this->db->error);
            return false;
        }

        $rc = $stmt->bind_param("ss", $name, $email);
        if ( !$rc ) {
            onError('database error', 'bind failed');
            return false;
        }

        if ( !$stmt->execute() ) {
            onError('database error', $stmt->errno.': '.$stmt->error );
            return false;
        }

        return true;
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM