【问题标题】:Issue On Inserting Auto Incremented ID in MySQL Using Prepared Statement使用准备好的语句在 MySQL 中插入自动增量 ID 的问题
【发布时间】:2014-12-14 08:15:27
【问题描述】:

我在 MySQL 数据库中有一个名为 MyGuests 的表,它有 4 个字段:id(PK 和自动增量)、姓名、年龄和电子邮件。我正在使用以下代码将数据从用户输入表单插入到数据库中:

<?php
$sql = mysqli('localhost','user','password','database');
$name  = $_POST['name'];
$age   = $_POST['age'];
$email = $_POST['email'];

$query = $sql->prepare("INSERT INTO MyGuests ( id, name, age, email) VALUES (?, ?, ?, ?)");

$query->bind_param("isis",$name,$age,$email);

$query->execute();
?>

现在我很困惑如何插入 id 的值,这是使用 Prepared 语句自动递增的字段!如您所见,我将 4 个参数作为(?, ?, ?, ?) 传递给数据输入,并将"isis" 用于bind_param();但不确定必须在 $name,$age,$email 中输入什么作为 id?

你能帮我解决这个问题吗?

谢谢

【问题讨论】:

  • 只需将其留空或将其从查询中删除。它是自动递增的,您无需执行任何操作 :)

标签: php mysql mysqli prepared-statement


【解决方案1】:

只需在查询中省略id,即

INSERT INTO MyGuests ( name, age, email) VALUES (?, ?, ?)

它会自动添加递增的 id,因此得名:)

【讨论】:

  • 感谢 anthonygore,您能告诉我我们应该如何处理指定默认值的字段吗?就像我有一个名为邀请的字段并且默认值为 0,(在收到确认后必须将其更新为 1)我如何将它插入到其他输入中的表中?
  • 如果您想向该字段写入值,请在查询中指定它。如果你只想要默认值,就省略它,就像上面的id
  • 我认为您也可以将DEFAULT 作为您想要默认值的任何字段的值(例如,如果您想要一个将默认值写入特定字段的可视队列),但是从查询中完全省略它们会做同样的事情
【解决方案2】:

另一个选项是为自动增量列提供空值:

即。 而不是
$query = $sql-&gt;prepare("INSERT INTO MyGuests ( id, name, age, email) VALUES (?, ?, ?, ?)");
使用
$query = $sql-&gt;prepare("INSERT INTO MyGuests ( id, name, age, email) VALUES (null, ?, ?, ?)");

【讨论】:

    猜你喜欢
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 2019-07-02
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多