0

我正在尝试将简单数据发送到使用 xampp 创建的数据库(端口更改为 81,没有密码......)。将数据插入数据表单并提交后,控制台日志发送正确的值,但本地主机和 php 片段上的数据库未更新: $stmt = $conn->stmt_init();

<?php
$conn = new mysqli('localhost:81', 'root', '', 'my_db');
$query = "INSERT into komentarze('name', 'email', 'comments') VALUES ($name, $email,     $comments)";

$stmt = $conn->stmt_init();

if($stmt->prepare($query)) {
    $stmt->bind_param('sss', $_POST['name'], $_POST['email'], $_POST['comments']);
    $stmt->execute();
}
?>

显示的 php 代码片段被放入新创建的 id="response" 元素中:

<script type="text/javascript">
    $(document).ready(function() {
        $('#submit').click(function() {

            var name = $('#name').val();
            var email = $('#email').val();
            var comments = $('#comments').val();

            $.ajax({
                url: 'submit_to_db.php',
                type: 'POST',
                data: {'name=': name,
                        'email=': email,
                        'comments=': comments },
                //data: 'name=' + name + '&email=' + email + '&comments=' + comments,
                success: function(result){
                    $('#response').remove();
                    $('#container').append('<p id="response">' + result + '</p>');
                }
            });
            return false;
        });
    });
</script>

如果 $stmt->affected_rows 与否,我已将静态值添加到 db 和 echo msg 并且没有发生任何事情;/

4

3 回答 3

0

这个说法有两个问题:

$query = "INSERT into komentarze('name', 'email', 'comments') VALUES ($name, $email,     $comments)";
  1. 列名应该用反引号括起来,即`,而不是撇号。

  2. 这些值应该是占位符而不是变量,即?, ?, ?.

这应该可以解决这两个问题:

$query = 'INSERT INTO komentarze(`name`, `email`, `comments`) VALUES (?, ?, ?)';
于 2013-06-11T01:34:16.320 回答
0

使用 mysqli 时,需要将$name,$email等替换为?. 相关代码应如下所示:

$query = "INSERT into komentarze('name', 'email', 'comments') VALUES (?, ?, ?)";
...
$stmt->bind_param('sss', $_POST['name'], $_POST['email'], $_POST['comments']);
于 2013-06-10T23:04:32.620 回答
-1

我可以看到两个问题。两者都与查询参数的绑定有关。

当你绑定你的变量时,你必须在你的语句'$_POST中用它的实际值替换一个占位符。SQL因此,您的查询将如下所示:

$query = "INSERT into komentarze('name', 'email', 'comments') VALUES (?,?,?)";

其次,您需要通过为每个变量调用后续调用来确保每个值都绑定到查询。bind_param

于 2013-06-10T23:05:35.067 回答