PHP不会向MySQL发送数据

时间:2016-09-07 14:45:18

标签: php mysql

有一些问题我无法找到解决方案,虽然通过许多来源搜索(以及此处的问题)。所以,这里是。
使用下面的PHP代码,我想从HTML表单中收集数据并将其发送到本地WAMP服务器。但是,虽然最终检查显示我“成功!”,但没有找到数据库表中的新行,它仍然是空的。名字是正确的,命令是(我也看到),所以我只是不知道什么是错的 我希望你们能帮助我。 ^^

//Check if user submited a form
if (isset($_POST['submit'])) {
    //Check if from is properly filled
    if (empty($_POST['itemName']) || empty($_POST['itemPic']) || empty($_POST['itemPrice']) || empty($_POST['itemProvider'])) {
        echo '<script>alert ("Fill out the form please!")</script>';
    } else {
        $conn = new mysqli('localhost:3306', 'root', '', 'goods-review');
        //Check if connection established
        if (mysqli_connect_errno()) {
            exit('Connect failed: ' . mysqli_connect_error());
        }
        //Sending data
        $newItem = array('itemName' => $_POST['itemName'], 'itemPic' => $_POST['itemPic'], 'itemPrice' => $_POST['itemPrice'], 'itemProvider' => $_POST['itemProvider']);
        $sql = "INSERT INTO goods (itemName, itemPic, itemPrice, itemDate, itemProvider) VALUES ('" . $newItem['itemName'] . "', '" . $newItem['itemPic'] . "', '" . $newItem['itemPrice'] . "', date('Y:m:d, H:i:s'), '" . $newItem['itemProvider'] . "')";
        //Check if sent
        if ($sql) {
            echo '<script>alert ("Success!")</script>';
        } else {
            echo '<script>alert ("Error!")</script>';
        }
        $conn->close();
    }
}

2 个答案:

答案 0 :(得分:0)

代码只是为变量赋值。

  $sql = "INSERT ...";

字符串值未提交给数据库;它不是作为SQL语句执行的。关于变量的名称并没有什么神奇之处。就PHP而言,代码只是为变量赋值。就是这样。

如果要执行SQL语句,则需要添加实际执行该操作的代码。找到如何做到这一点的例子应该不难。

重要说明:问题中的代码似乎创建了一个易受SQL注入攻击的SQL语句。一个更好的模式是使用预备语句绑定占位符

参考:mysqli_prepare

如果有一些(不可理解的)原因导致您无法使用预准备语句,那么至少必须正确转义SQL文本中包含的任何可能不安全的值。

参考:mysqli_escape_string

答案 1 :(得分:-2)

如果您先设置$newItem阵列。

Normaly您将验证用户输入并确保用户输入中没有SQL注入。 请在此处阅读:What is SQL injection?

之后

(您必须添加$newItem['itemDate']=date('Y:m:d, H:i:s');

$sql = "INSERT INTO goods (".implode(', ',array_keys($newItem)).")"
      ." VALUES ('".implode("', '",$newItem)."')";
if (mysqli_query($conn,$sql)){
    echo '<script>alert ("Success!")</script>';
} else {
    echo '<script>alert ("Error!")</script>';
}

如果你使用它:

  • 你没有太注意正确的田间秩序

  • 每个字段值围绕它们变为'

  • 您编写的代码较少

  • 字段数和订单可以更改

如果没有插入任何内容,mysqli_query()最后会返回FALSE,您可以检查它。

旁注:尝试使用MYSQLi扩展和准备状态的OOP版本。在此处阅读:mysqli, OOP vs Procedural