Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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 获取call_user_func_array()以使用准备好的sql语句_Php_Mysql - Fatal编程技术网

Php 获取call_user_func_array()以使用准备好的sql语句

Php 获取call_user_func_array()以使用准备好的sql语句,php,mysql,Php,Mysql,我必须从具有可变数量属性的$place对象构建sql语句和参数。当我通过构建sql语句和参数来使用准备好的sql语句时,它的工作方式是漫长而糟糕的(返回数据库中它应该返回的所有行): 没有提供数据?将鼠标悬停在调试器中的$queryParams参数上会显示: 0:"Grey Lynn" 1:"Auckland" 2:"Auckland" 3:"New Zealand" 因此,我确实为$stmt->bind_param()函数提供了查询参数。我是否提供了错误的格式 将鼠标悬停在$QueryPar

我必须从具有可变数量属性的$place对象构建sql语句和参数。当我通过构建sql语句和参数来使用准备好的sql语句时,它的工作方式是漫长而糟糕的(返回数据库中它应该返回的所有行):

没有提供数据?将鼠标悬停在调试器中的$queryParams参数上会显示:

0:"Grey Lynn"
1:"Auckland"
2:"Auckland"
3:"New Zealand"
因此,我确实为
$stmt->bind_param()
函数提供了查询参数。我是否提供了错误的格式

将鼠标悬停在$QueryParamTypes上会显示:

"ssss"
将鼠标悬停在$query上会显示:

"SELECT p.*, s.* FROM product p INNER JOIN product_shop ps ON ps.p_id = p.p_id INNER JOIN shop s ON s.s_id = ps.s_id WHERE suburb = ? AND city = ? AND province = ? AND country = ?"
当使用问题顶部的代码时,它如何工作?当使用没有所有is语句的代码时,它如何工作?

不使用数组作为参数,而是使用varargs。如果要使用动态数量的参数调用它,则需要使用

i、 e

不接受数组作为参数,它接受varargs。如果要使用动态数量的参数调用它,则需要使用

i、 e


需要引用传递给call_user_func_数组参数2的参数

这是可行的解决方案:

    function makeValuesReferenced($arr){
    $refs = array();
    foreach($arr as $key => $value)
        $refs[$key] = &$arr[$key];
    return $refs;
    }

$stmt = $conn->prepare($query);
//$stmt->bind_param($queryParamTypes, $queryParams); 
call_user_func_array(array($stmt, 'bind_param'), makeValuesReferenced($queryParams));
$stmt->execute();
依照


由于不知道参考资料的事,我很长时间都在胡闹。希望这能帮助一些人

需要引用传递给call_user_func_数组参数2的参数

这是可行的解决方案:

    function makeValuesReferenced($arr){
    $refs = array();
    foreach($arr as $key => $value)
        $refs[$key] = &$arr[$key];
    return $refs;
    }

$stmt = $conn->prepare($query);
//$stmt->bind_param($queryParamTypes, $queryParams); 
call_user_func_array(array($stmt, 'bind_param'), makeValuesReferenced($queryParams));
$stmt->execute();
依照


由于不知道参考资料的事,我很长时间都在胡闹。希望这能帮助一些人

最后,您将显示故障查询的外观,您是否也可以显示要比较的功能查询?@JuliePelletier
“从产品p内部连接ps上的产品p商店ps.p商店id=p.p商店id=ps.s商店id=ps.s商店id,其中s.country=?和s.province=?和s.city=?和s.郊区=?中选择p.*”
,您可以显示故障查询的外观,是否也可以显示要比较的功能查询?@JuliePelletier
“从产品p内部连接产品商店ps上选择p.*,s.*,s.*,ps.p_id=p.p_id内部连接商店s上s.s_id=ps.s_id,其中s.country=?和s.province=?和s.city=?以及s.郊区=?”
我已经走上了这条路,但不知什么原因,它不起作用,但我们用尽了所有的办法来尝试。我可以把$params数组分解成多个字符串吗?@benaminou Baggins如果这个数字总是常量,你可以这样做,但从你的代码看,它看起来不像是常量。尝试此方法时出现了什么错误?我意识到我并没有将
s.country
等添加到sql查询中,只是在指定cloumn时出现了
country
,这是一个主要问题。我现在已经纠正了这个问题,但它仍然不起作用。我已经沿着这条路线走了,但不知为什么它不起作用,但我们用尽了所有的办法试图做到这一点。我可以把$params数组分解成多个字符串吗?@benaminou Baggins如果这个数字总是常量,你可以这样做,但从你的代码看,它看起来不像是常量。尝试此方法时出现了什么错误?我意识到我并没有将
s.country
等添加到sql查询中,只是在指定cloumn时出现了
country
,这是一个主要问题。我现在已经纠正了这个问题,但它仍然不起作用。
"SELECT p.*, s.* FROM product p INNER JOIN product_shop ps ON ps.p_id = p.p_id INNER JOIN shop s ON s.s_id = ps.s_id WHERE suburb = ? AND city = ? AND province = ? AND country = ?"
$params = array_unshift($queryParams, $queryParamTypes);
call_user_func_array(array($stmt, "bind_param"), $params);
    function makeValuesReferenced($arr){
    $refs = array();
    foreach($arr as $key => $value)
        $refs[$key] = &$arr[$key];
    return $refs;
    }

$stmt = $conn->prepare($query);
//$stmt->bind_param($queryParamTypes, $queryParams); 
call_user_func_array(array($stmt, 'bind_param'), makeValuesReferenced($queryParams));
$stmt->execute();