【问题标题】:How can I send data by json in php如何在php中通过json发送数据
【发布时间】:2019-04-09 19:59:34
【问题描述】:

我正在尝试在我的本地主机中使用 w3school 示例,但是当我运行它时,它给了我这个错误

致命错误:未捕获的错误:在 C:\xampp\htdocs\test\json_demo_db.php:7 中调用 bool 上的成员函数 bind_param() 堆栈跟踪:#0 {main} 在 C:\xampp\htdocs 中抛出\test\json_demo_db.php 在第 7 行

我刚刚从 w3school 复制了代码并替换了有关我的数据库的信息

这是我的代码

<?php
header("Content-Type: application/json; charset=UTF-8");
$obj = json_decode($_GET["x"], false);

$conn = new mysqli("localhost", "root", "", "blog");
$stmt = $conn->prepare("SELECT name FROM ? LIMIT ?");
$stmt->bind_param("ss", $obj->table, $obj->limit);
$stmt->execute();
$result = $stmt->get_result();
$outp = $result->fetch_all(MYSQLI_ASSOC);

echo json_encode($outp);
?>

这是我的 html 和 js

<html>
<body>

<h2>Get data as JSON from a PHP file on the server.</h2>

<p>The JSON received from the PHP file:</p>

<p id="demo"></p>

<script>
    var obj, dbParam, xmlhttp;
    obj = { "table":"users", "limit":10 };
    dbParam = JSON.stringify(obj);
    xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            document.getElementById("demo").innerHTML = this.responseText;
        }
    };
    xmlhttp.open("GET", "json_demo_db.php?x=" + dbParam, true);
    xmlhttp.send();
</script>

</body>
</html>

这是 w3school 示例的链接(PHP 数据库)

https://www.w3schools.com/js/js_json_php.asp

【问题讨论】:

  • 您的准备​​失败,因为您无法绑定表名和列名:SELECT name FROM ? ...

标签: javascript php json ajax


【解决方案1】:

prepare() 方法正在返回 FALSE,因为您没有为其提供表名。

你正在FALSE上调用函数bind_param()

直接提供表名:

$stmt = $conn->prepare("SELECT name FROM `$obj->table` LIMIT ?");

所以,你修改后的代码应该是:

$stmt = $conn->prepare("SELECT name FROM `$obj->table` LIMIT ?");
$stmt->bind_param("s", $obj->limit);

【讨论】:

  • 我知道,为什么 w3 使用?对于表名和限制??
  • 一般情况下,我们不会在准备好的语句中将表名作为参数传递。不知道为什么 w3schools 使用它:)
  • 这段代码引入了一个大的 sql 注入问题,你肯定需要修复它。
  • @Hassan,不客气。祝你学习好运。请大家参考php.net、dev.mysql.com等官方网站学习。
  • @jeroen,感谢您指出。我会尽快更新答案。
猜你喜欢
  • 2020-03-29
  • 1970-01-01
  • 1970-01-01
  • 2016-07-03
  • 2015-04-12
  • 2017-09-18
  • 2015-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多