PHP数据库连接类bind_param

时间:2015-07-10 14:37:50

标签: php database mysqli

我想编写一个数据库连接类,我不明白如何使用bind_param -s编写select方法。这是full code。在这里我需要帮助的部分代码:

public function select($sql){
        $db = $this->connect(); //This methos connect to the DB
        $stmt = $db->prepare($sql); 
        if($stmt === false){ //If the prepare faild
            trigger_error("Wrong SQL", E_USER_ERROR);
        }
        $error = $stmt->bind_param("i", $id);
        if($error){
            return "Error: ".$stmt->error, $stmt->errno;
        }
        $err = $stmt->execute();
        if($error){
            return "Error: ".$stmt->error, $stmt->errno;
        }
        $result =  $stmt->bind_result($id);
        $stmt->close();
        $dbConnection->closeConnection($db);
        return $result;
    }

我需要得到它的参数或我该如何解决它?

1 个答案:

答案 0 :(得分:0)

您还需要将值传递给此函数。并最终将它们绑定在准备好的声明中 您可以选择传递带有类型的字符串,但默认情况下所有" s"会做的。

还要记住,每个脚本执行只能连接ONCE。,然后在整个代码中一直使用一个连接。

并摆脱所有这些错误检查。而是Set mysqli in exception mode

public function q($sql, $values = array(), $types = NULL)
{
    $stm = $this->mysql->prepare($sql);
    if (!$types)
    {
        $types = str_repeat("s", count($values));
    }

    if (strnatcmp(phpversion(),'5.3') >= 0)
    {
        $bind = array();
        foreach($values as $key => $val)
        {
            $bind[$key] = &$values[$key];
        }

    } else {

        $bind = $values;
    }

    array_unshift($bind, $types);
    call_user_func_array(array($stm, 'bind_param'), $bind);
    $stm->execute();
    return $stm->get_result();
}

所以它可以像这样使用

$res = $db->q("SELECT name FROM users WHERE id=?", [$id]);

$res = $db->q("SELECT name FROM users WHERE id=?", [$id], "i");

您的其他功能也必须更改。

class DB{

    public $con;

    function __construct()
    {
         $this->con = new mysqli("localhost", "root", "", "proba_fferenc");
    }

    public function select(...)
    {
        // as shown above
    }
}