我有 DB 类,它处理将对数据库进行的所有查询
我的 mysqli 准备工作正常。
bind_param 也工作正常,但问题是我想动态定义变量类型。
这是我的代码
public function query($sql, $params = array()){
$this->_error = false;
if($this->_query = $this->_mysqli->prepare($sql)){
$x = 1;
if(count($params)){
foreach($params as $param){
$this->_query->bind_param($x, $param);
$x++;
}
}
在 PDO 第一个参数定义位置我猜所以这个函数通过每次设置 X = 1 和 x++ 运行良好,
但在bind_param
我猜第一个参数定义了类型
正如 php.net 手册所说
那么如果用户推送我设置的积分值有什么办法吗
x = 我
对于字符串
x = s
所有 4 种类型依此类推...
like
if((int)$param->){
x = i;
}
有什么想法吗?
提前致谢
对于类型来说很容易。只需使用s
一路走来。
还有一个更复杂的问题:事实上,你不能在循环中绑定,所以,必须使用call_user_func()
public function query($sql, $params = array())
{
if (!$params)
{
return $this->_mysqli->query($sql);
}
$stmt = $this->_mysqli->prepare($sql);
$types = str_repeat("s", count($params));
if (strnatcmp(phpversion(),'5.3') >= 0)
{
$bind = array();
foreach($values as $key => $val)
{
$bind[$key] = &$params[$key];
}
} else {
$bind = $values;
}
array_unshift($bind, $types);
call_user_func_array(array($stmt, 'bind_param'), $bind);
$stmt->execute();
return $stmt->get_result();
}
请注意,您不应将语句分配给局部变量,并且错误变量也没有用处。例外在各方面都更好。
看了上面的代码,在使用 PDO 之前你应该三思而后行,这样的函数只需要三行:
public function query($sql, $params = array())
{
$stmt = $this->_pdo->prepare($sql);
$stmt->execute($params);
return $stmt;
}
如果您没有 PDO 经验,这里有一个PDO教程我写过,从中您将了解到它是最简单但最强大的数据库 API,只需很少的代码即可获取数十种不同格式的数据。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)