我想编写一个数据库连接类,我不明白如何使用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;
}
我需要得到它的参数或我该如何解决它?
答案 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
}
}