Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用函数创建准备好的语句_Php_Mysql_Mysqli_Prepared Statement - Fatal编程技术网

Php 如何使用函数创建准备好的语句

Php 如何使用函数创建准备好的语句,php,mysql,mysqli,prepared-statement,Php,Mysql,Mysqli,Prepared Statement,我不熟悉这些准备好的语句(到目前为止,我所有的代码都是过程性的),我试图创建一个函数来执行准备好的语句,这样我就可以为我需要的每个SQL查询节省编写语句的时间 function executeQuery($stmt,$mysqli,$sql,$type,$param1,$param2,$param3){ $stmt = $mysqli -> stmt_init(); $stmt = $mysqli -> prepare($sql); $stmt->bin

我不熟悉这些准备好的语句(到目前为止,我所有的代码都是过程性的),我试图创建一个函数来执行准备好的语句,这样我就可以为我需要的每个SQL查询节省编写语句的时间

function executeQuery($stmt,$mysqli,$sql,$type,$param1,$param2,$param3){
    $stmt = $mysqli -> stmt_init();
    $stmt = $mysqli -> prepare($sql);
    $stmt->bind_param($type,$param1,$param2,$param3);
    $stmt->execute();
    $stmt->close();
}
正如您所看到的,我的问题是,对于只处理查询中的1个参数、一个用于2个参数、另一个用于3个参数的预处理语句,我需要一个不同的函数,以此类推。我曾想过将$param作为一个数组,但我认为这不太管用


有什么想法吗?

你考虑过使用数组吗?@MarcusAdams-我不确定这是否有帮助,因为在bind_param()中,它需要用逗号列出每个变量。如果我将$param作为一个数组,我会得到:“警告:mysqli_stmt::bind_param()[mysqli stmt.bind param]:类型定义字符串中的元素数与绑定变量数不匹配”使用PDO而不是mysqli…因为它允许您在
execute()
方法中从数组绑定所有参数,这样做会容易10000倍。(也就是说,一个数组可以具有可变长度、可变数量的参数,因此您不需要为每个不同数量的参数使用单独的函数。)@developerwjk Mysqli是否完全不能绑定数组?仅仅为了这个而切换到PDO似乎太过分了。无论如何,Mysqli都很糟糕。首先,它太容易与mysql混淆。第二,它有OOP和过程方法,在人们混合使用它们的地方,这些方法倾向于草率的代码。第三,PDO适用于不同的数据库(mysql、mssql、oracle),但MySQLi只适用于mysql。等等。切换到PDO是个好主意。