我试图将函数应用于代码时遇到致命错误
$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.....
致命错误:未捕获错误:函数名必须是....中的字符串。“
到目前为止,我看不到这个错误。谢谢
发布于 2019-11-13 07:32:01
执行以下操作:
$id_matriz_sponsor = get_sponsor_matrix_id($sponsorId,$matrixid); 而不是:
$id_matriz_sponsor = $get_sponsor_matrix_id($sponsorId,$matrixid); 除非您已经将函数存储在一个变量中(我一般不推荐这样做),否则您需要根据函数的名称调用函数,而不使用美元符号。PHP中的美元符号用于调用变量。
此外,正如已经指出的,您必须准备您的DB语句,以避免SQL injection,因为您现在正面临这种情况。这是非常严重的事情,根据SQL用户的权限,黑客可能会通过提交POST参数来复制甚至删除整个数据库。
您可以准备一个MySQLi查询并转义您的输入数据,如下所示:
$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进行调整。
https://stackoverflow.com/questions/58828006
复制相似问题