Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.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 ajax可以工作,但不能在本地主机上工作_Php_Jquery_Mysql_Ajax - Fatal编程技术网

php ajax可以工作,但不能在本地主机上工作

php ajax可以工作,但不能在本地主机上工作,php,jquery,mysql,ajax,Php,Jquery,Mysql,Ajax,我最近在工作中继承了一个项目,我正试图在本地主机上设置一个本地实例,这样我就可以使用它,而不会影响实时站点。问题是一些ajax调用在响应时给了我错误。id是用户id,在工作实例中,它返回权限表中id与用户表中id匹配的任何行。这只是本地主机上的一个问题。任何关于为什么会发生这种情况的建议都将不胜感激。谢谢 Ajax调用 PHP 错误 更改过程,使其仅返回要绑定的3列。另外,我建议使用JOIN而不是子查询,因为众所周知,MySQL在优化该语法方面很差 SELECT p.id, p.user, p.

我最近在工作中继承了一个项目,我正试图在本地主机上设置一个本地实例,这样我就可以使用它,而不会影响实时站点。问题是一些ajax调用在响应时给了我错误。id是用户id,在工作实例中,它返回权限表中id与用户表中id匹配的任何行。这只是本地主机上的一个问题。任何关于为什么会发生这种情况的建议都将不胜感激。谢谢

Ajax调用 PHP 错误
更改过程,使其仅返回要绑定的3列。另外,我建议使用
JOIN
而不是子查询,因为众所周知,MySQL在优化该语法方面很差

SELECT p.id, p.user, p.status
FROM user_permissions AS p
JOIN users AS u ON u.id = p.user_id
WHERE u.uid = p_eid\
如果无法更改过程,则需要更改PHP,使其绑定的变量与
user\u permissions
表中的列数相同

为了避免SQL注入问题,在进行查询时使用
bind_param

$sql = "CALL CheckAdmin(?)";
$result = $mysqli->prepare($sql);
$result->bind_param("s", $eid);
$result->execute();
  • 请尝试从用户权限中选择id、用户、状态,而不是选择*
  • 如果第一个不起作用

    var_dump($col1);
    var_dump($2);
    var_dump($3)
    也许一个变量是数组


  • user_权限有多少列?此错误告诉您,当您调用
    bind_result
    函数时,您试图绑定的变量比实际返回的变量多。您容易受到或减少变量的攻击。顺便说一句,在进行查询时应该使用
    bind_param
    ,而不是在SQL中进行变量替换。我使用了错误的用户名lol。谢谢你的建议。谢谢,我已经想到了这一点。这是表中仅有的三列。这就是我觉得奇怪的原因。它应该返回匹配数量的列,并且在web服务器上工作。我猜您的表架构在localhost上与在服务器上不同。谢谢,是的,我刚刚计算出来,非常接近。我在存储过程中使用了错误的用户名。谢谢汉克斯,他已经试过了。结果证明是一个错误的用户名。
    CREATE DEFINER=`myDB`@`%` PROCEDURE `CheckAdmin`(IN p_eid CHAR(36))
    BEGIN
    SELECT * FROM user_permission WHERE (SELECT id FROM users WHERE uid = p_eid) = user_id;
    END
    
    Warning: mysqli_stmt::bind_result(): Number of bind variables doesn't match number of fields in prepared statement
    
    SELECT p.id, p.user, p.status
    FROM user_permissions AS p
    JOIN users AS u ON u.id = p.user_id
    WHERE u.uid = p_eid\
    
    $sql = "CALL CheckAdmin(?)";
    $result = $mysqli->prepare($sql);
    $result->bind_param("s", $eid);
    $result->execute();