mysql中的动态绑定_如何在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);

}

为什么?有什么想法可以使它起作用吗?

也许有更好的解决方案?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL ,可以使用 BLOB 类型来存储二进制数据,包括图片。 以下是将图片存储到 MySQL 的步骤: 1. 创建一个表来存储图片,示例代码如下: ``` CREATE TABLE images ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30) NOT NULL, image MEDIUMBLOB ); ``` 2. 在应用程序,读取图片并将其转换为二进制数据。 例如,以下代码使用 PHP 读取图片并将其存储到 MySQL : ```php // 获取图片二进制数据 $imageData = file_get_contents('path/to/image.jpg'); // 连接数据库 $conn = mysqli_connect('localhost', 'username', 'password', 'database'); // 准备 SQL 语句 $sql = "INSERT INTO images (name, image) VALUES (?, ?)"; // 创建预处理语句 $stmt = mysqli_prepare($conn, $sql); // 绑定参数 mysqli_stmt_bind_param($stmt, "sb", $imageName, $imageData); // 执行预处理语句 mysqli_stmt_execute($stmt); // 关闭预处理语句和数据库连接 mysqli_stmt_close($stmt); mysqli_close($conn); ``` 3. 当需要显示图片时,从数据库读取二进制数据并将其转换为图像。例如,以下 PHP 代码从数据库读取图片并在浏览器显示: ```php // 连接数据库 $conn = mysqli_connect('localhost', 'username', 'password', 'database'); // 准备 SQL 语句 $sql = "SELECT image FROM images WHERE id = ?"; // 创建预处理语句 $stmt = mysqli_prepare($conn, $sql); // 绑定参数 mysqli_stmt_bind_param($stmt, "i", $imageId); // 执行预处理语句 mysqli_stmt_execute($stmt); // 绑定结果 mysqli_stmt_bind_result($stmt, $imageData); // 读取结果 mysqli_stmt_fetch($stmt); // 输出图像 header("Content-type: image/jpeg"); echo $imageData; // 关闭预处理语句和数据库连接 mysqli_stmt_close($stmt); mysqli_close($conn); ``` 注意:在实际应用,需要确保图片数据的安全性和完整性,例如验证上传的图片类型、大小和文件名,以及使用 HTTPS 协议传输图片数据等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值