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

标签 php jquery mysql ajax

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

Ajax调用

 $.ajax({
    type: 'POST',
    url: '../wwwroot/models/apm/CheckAdmin.php',
    data: {
        eid: id
    },
    dataType: 'json',
    success: function (data) {
        //console.log(data);
        if (data[0].status == 2) {
            ret = true;
            $('#devTimeGrp').show();

            $('#mngTab').show();
            console.log("anAdmin............");
        }
        else {
            ret = false;
            $('#devTimeGrp').show();
            $('#mngTab').hide();
            console.log("notAdmin......");
            //$('#mngTab').show();
        }
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
    }
});

PHP

<?php
include("../db-settings.php");

$eid = $_POST['eid'];

echo $eid;

$sql="call CheckAdmin('$eid')";

$result = $mysqli->prepare($sql);

$result->execute();
$result->bind_result($col1, $col2, $col3);

while($result->fetch()){
    $out[] = array( 'id' => $col1,
                    'user' => $col2,
                    'status' => $col3);
}
echo json_encode($out);
$result->close();
?>

存储过程

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

最佳答案

更改程序,使其仅返回您绑定(bind)的 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,以便它绑定(bind)与 user_permissions 表中的列数一样多的变量。

并且为了避免 SQL 注入(inject)问题,在进行查询时使用 bind_param:

$sql = "CALL CheckAdmin(?)";
$result = $mysqli->prepare($sql);
$result->bind_param("s", $eid);
$result->execute();

关于php ajax 可以工作但不能在本地主机上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33306788/

相关文章:

mysql - 一个全栈网站需要运行多少个 NodeJS 项目?

php - 将 PHP 变量发送到 JavaScript 函数

javascript - 无需提交表单的 Jquery 验证

jquery - 基于ajax请求在radio选项后附加div

javascript - 防止 html 页面在页面加载时自动滚动到小部件

mysql - 如何将 REGEXP 与转义序列(如字边界)一起使用?

javascript - Jquery keyup() 函数无法正常工作

php - 我应该在 Xampp (linux) 中存储 WordPress 网站的位置

PHP - 如何将文件修改日期与当前日期进行比较

sql - MySQL Join子选择优化