php ajax工作但不在localhost上

时间:2015-10-23 16:00:22

标签: php jquery mysql ajax

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

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

2 个答案:

答案 0 :(得分:1)

更改程序,使其仅返回您要绑定的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_permissions表中的列数一样多的变量。

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

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

答案 1 :(得分:0)

  1. 请尝试SELECT id,user,status FROM user_permission而不是SELECT *
  2. 如果第一个不能正常工作

    var_dump($col1); var_dump($col2); var_dump($col3); 也许变量是数组。