我有一个处理数据库信息的函数。这在一个页面中被多次调用。而且我不想每次都查询数据库。所以我把查询放在外面。如果我这样做,该功能将不起作用。我知道这是可以做到的,因为 SO 中的某个地方也有类似的问题。但这解决了不同的情况。我不知道这里出了什么问题。任何帮助将不胜感激。
如果我将所有这些代码放入一个单独的测试文件(包括 conn 文件和查询)中,它就可以工作。但是在我的主页中,我首先包含functions.php,然后是conn.php,然后是查询,然后是js fadein 事件调用的显示代码,$result 拒绝在函数内工作
编辑:此代码已根据收到的评论进行清理(全局变量替换为传递给函数的变量和合理化的变量名称)
function total($item,$result,$val){
global $totRate;
while($getRates=$result->fetch_assoc()){
$gotItem= strtolower(preg_replace('/[^(\x20-\x7F)]*/',"",$getRates['item']));
$gotItem=str_replace(array("_"," ","/"),"",$gotItem);
if($item==$gotItem){
$rate= $getRates['rate'];
$totRate=$val*$rate;
return $totRate;
}
}
}
调用PHP文件的结果
$query = "SELECT * FROM rates ORDER BY item";
$result = $orderdb->query($query)
if (isset($_POST[$itemname]) && !empty($_POST[$itemname])) {
$val=$_POST[$itemname];
total($itemname);
echo $totprate;
} else {
echo "0";
}
最佳答案
我写这篇文章的假设是您的 SQL 正在运行,但在显示您想要的内容时遇到问题 - 这可能会有所帮助。下面的代码保存查询中的 $result
变量,然后将其作为第二个参数传递到 total
函数中。以前,您从 total
返回 $totprate
,但没有将其保存在任何地方 - 现在它保存到 $totprate
变量中。
注意:我在代码中的任何位置都看不到 $orderdb
,我假设您的文件中有它并且它正在工作。
function total($item, $result){
global $val;
global $pid;
global $pitem;
global $prate;
global $totprate;
global $gotitem;
global $getratess;
// global variable for $result removed so it doesn't overwrite variable passed to function
while($getratess=$result->fetch_assoc()){
$gotitem= strtolower(preg_replace('/[^(\x20-\x7F)]*/',"",$getratess['item']));
$gotitem=str_replace(array("_"," ","/"),"",$gotitem);
if ($item==$gotitem) {
$pid=$getratess['id'];
$pitem= $getratess['item'];
$prate= $getratess['rate'];
$totprate=$val*$prate;
return $totprate;
}
}
}
$query = "SELECT * FROM rates ORDER BY item";
$result = $orderdb->query($query);
if (isset($_POST[$itemname]) && !empty($_POST[$itemname])) {
$val=$_POST[$itemname];
$totprate = total($val, $result); // pass itemname as first parameter and result array as second parameter and save it to the $totprate variable
echo $totprate;
} else {
echo "0";
}
请告诉我这是否有帮助。
关于php - 将 mysql 查询的结果对象获取到函数中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41298112/