You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ajax请求报mysqli_stmt_execute(): Property access is not allowed错误如何解决

错误原因分析
  • 预处理语句使用流程错误:你初始化了mysqli_stmt对象后,没有调用mysqli_stmt_prepare()将SQL语句和语句对象绑定,直接执行mysqli_stmt_execute()就会触发你看到的报错。而且你当前直接拼接SQL语句,完全没有用到预处理的参数绑定功能,还存在严重的SQL注入风险。
  • 参数解码重复:前端已经用encodeURIComponent()对参数编码,PHP的$_REQUEST会自动完成URL解码,你额外调用urldecode($c)会导致带特殊字符的公司名称匹配错误。
  • 结果集读取错误:mysqli_stmt_get_result()返回的是结果集对象,不能直接用[0]取数据,需要先调用fetch_assoc()/fetch_row()方法读取行数据。
  • 错误输出导致颜色值非法:PHP执行报错时会输出HTML格式的错误信息,不是合法的十六进制颜色值,color输入框识别失败就会默认回退到#000000。
修正后的PHP代码
<?php
$c = $_REQUEST["c"] ?? "";
require 'database.php';

if ($c !== "") {
    // 预处理SQL语句使用占位符,避免注入风险
    $sql = "SELECT color FROM dreiecke WHERE firma = ?";
    $stmt = mysqli_stmt_init($conn);
    // 先将SQL语句和预处理对象绑定
    if (mysqli_stmt_prepare($stmt, $sql)) {
        // 绑定参数,s表示参数为字符串类型
        mysqli_stmt_bind_param($stmt, "s", $c);
        // 绑定完成后再执行语句
        mysqli_stmt_execute($stmt);
        $result = mysqli_stmt_get_result($stmt);
        // 读取结果集的第一行数据
        $row = mysqli_fetch_assoc($result);
        echo isset($row['color']) ? $row['color'] : "#ff22ff";
        mysqli_stmt_close($stmt);
    } else {
        echo "#ff22ff";
    }
} else {
    echo "#ff22ff";
}
?>
可选优化建议
  • 可以在AJAX请求的onload回调里加一层格式校验,确认返回值是合法的十六进制颜色格式再赋值,避免异常输出导致输入框显示异常。
  • onkeyup事件可以加防抖逻辑,避免频繁输入时发送大量无用请求。

内容的提问来源于stack exchange,提问作者Lukas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 22:39:02