php param参数,如何在PHP中动态绑定mysqli bind_param参数?

这篇博客探讨了如何在PHP中动态地为MySQL预处理语句绑定参数。作者遇到的问题是,当前的实现方式无法适应不同数量的参数情况。他们尝试使用`call_user_func_array`和`bind_params`来实现动态绑定,但遇到了困难,特别是在PHP 5.3及以上版本中需要引用参数。博客中寻求解决方案,希望能使代码更加灵活,以适应无参数、单参数和多参数的情况。
摘要由CSDN通过智能技术生成

如何在PHP中动态绑定mysqli bind_param参数?

我一直在学习为我的sql查询使用预备语句和绑定语句,到目前为止我已经提出了这个问题,它可以正常工作但是当涉及到多个参数或者当不需要参数时,它根本不是动态的,public function get_result($sql,$parameter)

{

# create a prepared statement

$stmt = $this->mysqli->prepare($sql);

# bind parameters for markers

# but this is not dynamic enough...

$stmt->bind_param("s", $parameter);

# execute query

$stmt->execute();

# these lines of code below return one dimentional array, similar to mysqli::fetch_assoc()

$meta = $stmt->result_metadata();

while ($field = $meta->fetch_field()) {

$var = $field->name;

$$var = null;

$parameters[$field->name] = &$$var;

}

call_user_func_array(array($stmt, 'bind_result'), $parameters);

while($stmt->fetch())

{

return $parameters;

//print_r($parameters);

}

# close statement

$stmt->close();

}

这就是我调用对象类的方式,$mysqli = new database(DB_HOST,DB_USER,DB_PASS,DB_NAME);$output = new search($mysqli);

有时候我不需要传递任何参数,$sql = "

SELECT *

FROM root_contacts_cfm

";print_r($output->get_result($sql));

有时我只需要一个参数,$sql = "

SELECT *

FROM root_contacts_cfm

WHERE root_contacts_cfm.cnt_id = ?

ORDER BY cnt_id DESC

";print_r($output->get_result($sql,'1'));

有时我只需要一个以上的参数,$sql = "

SELECT *

FROM root_contacts_cfm

WHERE root_contacts_cfm.cnt_id = ?

AND root_contacts_cfm.cnt_firstname = ?

ORDER BY cnt_id DESC

";print_r($output->get_result($sql,'1','Tk'));

所以,我认为这条线对于上面的动态任务来说不够动态,$stmt->bind_param("s", $parameter);

要动态构建bind_param,我在其他帖子上发现了这一点。call_user_func_array(array(&$stmt, 'bind_params'), $array_of_params);

我试图从php.net修改一些代码,但我无处可去,if (strnatcmp(phpversion(),'5.3') >= 0) //Reference is required for PHP 5.3+

{

$refs = array();

foreach($arr as $key => $value)

$array_of_param[$key] = &$arr[$key];

call_user_func_array(array(&$stmt, 'bind_params'), $array_of_params);

}

为什么?任何想法我怎么能让它工作?

或者也许有更好的解决方案?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值