【问题标题】:PHP Insert Data in mysql posted by json objectPHP在由json对象发布的mysql中插入数据
【发布时间】:2015-01-29 23:13:45
【问题描述】:

我想通过 PHP 将一些数据从 jQueryMobil.listwidget 发送到 mysql 数据库。

我像这样获取并发布我的列表项:

function getItems()
{ 
        var listview_array = new Array();
        $( "#itemList li" ).each(function(index) {
            listview_el = new Object();
            listview_el.id = index;
            listview_el.name=$(this).text();
            listview_el.owner="owner";
            listview_array.push(listview_el);
        });
        var stringifyObject = JSON.stringify(listview_array);
        //alert(stringifyObject);
        $.ajax({
            type: "POST",
            dataType: 'json',
            url: "insert.php",
            data: { mydata: stringifyObject },
        });
        //showItems();

}

我想将我的 json 对象添加到存在的 mysql 数据库/表中。根据我的请求,我的数据已发送,但 if(prepStmnt) 从未成功。

 <?php

    $con = new mysqli($servername, $username, $password, $dbname);
    if (!$con) {
      die('Could not connect: ' . mysqli_error($con));
    }

    echo "preps";
    if($preparedStatement = $con->prepare('INSERT INTO Einkaufsliste (item, owner) VALUES (:name, :owner)')){
        $preparedStatement->execute(json_decode($_POST["mydata"], true));
        $preparedStatement->close();
        echo "done";
    };

    $con->close();
    ?> 

您能告诉我为什么没有数据存储在我的数据库中吗?

【问题讨论】:

  • 您没有绑定变量:name:owner,因此没有插入它们
  • 但是,如果它们是固定输入,则不会提交任何数据
  • if($preparedStatement = $con->prepare('INSERT INTO Einkaufsliste (item, owner) VALUES ("milk", "me")')){
  • 在您的 MySQLi 语句中添加一些错误检查或查看错误日志,您可能会找到答案。
  • 检查:php.net/manual/es/mysqli-stmt.execute.php ... execute() 不能包含任何参数,您可能需要在执行准备好的语句之前绑定一些参数

标签: php mysql json html jquery-mobile


【解决方案1】:

MySQLi 确实支持命名参数。

if($preparedStatement = $con->[...snip...] (:name, :owner)')){
                                            ^^^^^^^^^^^^^

这在 MySQLi 中是完全非法的,因此您的准备失败,并且其他所有内容都落在脚本的末尾,因为您没有错误检查。

$prepare = $con->prepare(...);
if (!$prepare) {
   die(mysqli_error($con));
}

一个适当的 mysqli 准备好的语句应该是

$stmt = $con->prepare('INSERT ... VALUES (?, ?)');

注意? 占位符。

永远不要永远假设您的查询会成功。即使您的 sql 实际上是正确的,查询失败的方式也几乎是无限的。始终假设失败,检查失败,并将成功视为惊喜。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-01
    • 1970-01-01
    • 2019-09-07
    • 1970-01-01
    • 2017-07-04
    • 2019-03-17
    • 2016-01-24
    • 2019-09-11
    相关资源
    最近更新 更多