Php 获取call_user_func_array()以使用准备好的sql语句
我必须从具有可变数量属性的$place对象构建sql语句和参数。当我通过构建sql语句和参数来使用准备好的sql语句时,它的工作方式是漫长而糟糕的(返回数据库中它应该返回的所有行): 没有提供数据?将鼠标悬停在调试器中的$queryParams参数上会显示: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
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();