首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP致命错误:未捕获错误:函数名必须是字符串

PHP致命错误:未捕获错误:函数名必须是字符串
EN

Stack Overflow用户
提问于 2019-11-13 07:06:40
回答 1查看 195关注 0票数 0

我试图将函数应用于代码时遇到致命错误

代码语言:javascript
复制
    $userId = $_SESSION['userSession'];
    $matrixid = $_POST['matrixid'];

 $sponsorId = trae_sponsor($userId);


 $id_matriz_sponsor = $get_sponsor_matrix_id($sponsorId,$matrixid); 

function get_sponsor_matrix_id($id_usuario,$tipo_Matriz){

 global $DBcon;
 $sql = $DBcon->query("SELECT id FROM users_matrices WHERE userId=$id_usuario AND matrixId=$tipo_Matriz AND completed=0");
 $row = $sql->fetch_array();
 $id_matriz_sponsor = $row['id'];

 return $id_matriz_sponsor;

 }

function trae_sponsor($id_usuario){

global $DBcon;
$Sql = $DBcon->query("SELECT sponsor_id from users_referrals WHERE referred_id='$id_usuario' ");
$row = $Sql->fetch_array();
$id = $row["sponsor_id"];
return $id;
}

错误提示:“未定义的变量: get_sponsor_matrix_id in.....

致命错误:未捕获错误:函数名必须是....中的字符串。“

到目前为止,我看不到这个错误。谢谢

EN

回答 1

Stack Overflow用户

发布于 2019-11-13 07:32:01

执行以下操作:

代码语言:javascript
复制
$id_matriz_sponsor = get_sponsor_matrix_id($sponsorId,$matrixid); 

而不是:

代码语言:javascript
复制
$id_matriz_sponsor = $get_sponsor_matrix_id($sponsorId,$matrixid); 

除非您已经将函数存储在一个变量中(我一般不推荐这样做),否则您需要根据函数的名称调用函数,而不使用美元符号。PHP中的美元符号用于调用变量。

此外,正如已经指出的,您必须准备您的DB语句,以避免SQL injection,因为您现在正面临这种情况。这是非常严重的事情,根据SQL用户的权限,黑客可能会通过提交POST参数来复制甚至删除整个数据库。

您可以准备一个MySQLi查询并转义您的输入数据,如下所示:

代码语言:javascript
复制
$stmt = $DBcon->prepare("SELECT id FROM users_matrices
                         WHERE userId = ?
                         AND matrixId= ?
                         AND completed=0"
);
$stmt->bind_param('ii', $id_usuario, $tipo_Matriz); # Assuming both vars are integers
$stmt->execute();
$stmt->close();

$stmt = $DBcon->prepare("SELECT sponsor_id from users_referrals WHERE referred_id = ?");
$stmt->bind_param('i', $id_usuario);
$stmt->execute();
$stmt->close();

bind_param()方法中的i参数代表传递的绑定参数的整数数据类型。如果不使用整数,则需要根据documentation进行调整。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58828006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档