【问题标题】:PHP fails to insert into Mysql (auto increment)PHP 无法插入 Mysql(自动增量)
【发布时间】:2014-12-05 18:42:45
【问题描述】:

我已经把我的 Mysql 表链接成这个:

出现这个问题是因为我无法将 auto_increment 插入到我的 mysql 查询中。

index.php

<?php

        $name=$_POST["name"];
        $description=$_POST["description"];
        $image=$_POST["image"];
        $amount=$_POST["amount"];

 $sql=mysql_query("INSERT INTO `store`(`id`, `name`, `description`, `price`, `image`) VALUES (NULL,'".$name."','".$description."','".$amount."','".$image."')");




?>

我通过 HTML 表单发布到它,它确实执行了查询,但我在该表中没有得到任何行。我认为它是因为 auto_increment 或 Unique 或 Primary。我被告知使用 NULL 代替 auto_increment 值,但它不起作用。

有什么帮助吗?

P.S Noob 在这里!

编辑: 错误是:

不推荐使用:mysql_query():不推荐使用 mysql 扩展并将在未来删除:在第 9 行的 D:\xampp\htdocs\Html\Home\index.php 中使用 mysqli 或 PDO 代替

【问题讨论】:

  • VALUES ('','".$name."',
  • 不要在新代码中使用 mysql_query,它几乎已被弃用。此外,不要从用户输入构建查询字符串,您的应用程序将很容易受到 SQL 注入攻击。
  • 既然你没有这样做......在你打开&lt;?php标签error_reporting(E_ALL); ini_set('display_errors', 1);之后,在你的文件顶部添加错误报告,看看它是否会产生任何东西。还有or die(mysql_error())mysql_query()
  • 另外,你确定你已经连接了吗?
  • @AsheshKumar 好了,使用mysqli_ 函数。 php.net/manual/en/book.mysqli.php

标签: php html mysql sql post


【解决方案1】:

从您的查询中删除 id 列:

$sql=mysql_query("INSERT INTO `store`(`name`, `description`, `price`, `image`) VALUES ('".$name."','".$description."','".$amount."','".$image."')");

【讨论】:

  • @AsheshKumar 阅读您的问题下的 cmets。
【解决方案2】:

您不能将NULL 插入AUTO_INCREMENT 字段!它将自动填写此字段,因此请在没有id的情况下进行查询!

更新!

据我所知,最佳实践是 PDO,所以我建议您更改为 PDO!

而且你必须先建立一个连接! (DB_HOST等都是常量!你可以把它改成变量)

$dbh = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME, DB_USER, DB_PASSWORD);

然后试试这个:

<?php

    $statement = $dbh->prepare("INSERT INTO `store`(`name`, `description`, `price`, `image`)
                                            VALUES (':name',':description',':amount',':image')");

    $statement->bindParam(':name', $_POST['name']);
    $statement->bindParam(':description', $_POST['description']);
    $statement->bindParam(':amount', $_POST['amount']);
    $statement->bindParam(':image', $_POST['image']);

    $statement->execute();

?>

【讨论】:

  • 别忘了 strip_tags()!
  • @AsheshKumar 更新了它!试试新的,我也建议你逃避你的帖子! $connenction 是你的连接变量。
  • @Rizier123 为什么我必须传递给 $connection ?
  • @AsheshKumar 可选,但它指定 MySQL 连接。
  • 拜托,don't use mysql_* functions,它们不再维护,而是officially deprecated。改为了解prepared statements,并使用PDOMySQLiThis article 将帮助您做出决定。
【解决方案3】:

为了解决 mysql_query 被弃用的问题,我推荐PDO。使用准备好的 staements 超级简单,也更安全。此 sn-p 将提供与数据库的连接以进行查询:

$mysql_host = "localhost";
$mysql_db = "my_database";
$mysql_user = "my_user";
$mysql_password = "mypassword";
$db = new PDO('mysql:host='.$mysql_host.';dbname='.$mysql_db.';charset=utf8', $mysql_user, $mysql_password);

在您的页面上拥有该信息后,您可以使用 $db 与您的数据库进行交互。

$q = $db->prepare("INSERT INTO `store` (`name`, `description`, `price`, `image`) VALUES (:name, :desc, :amt, :img)");
$q->execute(array(":name"=>$name, ":desc"=>$description, ":amt"=>$amount, ":img"=>$image));

此外,对于自动递增值,您可以一起省略该字段。

PS,有一个 stntax 错误。您在左括号之前缺少一个空格: store (

【讨论】:

  • 被接受以说明建立数据库连接的最简单方法并指出语法错误
【解决方案4】:

从值中删除“id”到您的查询中

$sql=mysql_query("INSERT INTO `store`(`name`, `description`, `price`, `image`) VALUES ('".$name."','".$description."','".$amount."','".$image."')");

AUTO_INCREMENT 自己工作 ;)

【讨论】:

  • 不工作请帮忙
  • 使用 mysql_query( ) 或 die (mysql_error()) 打印错误
【解决方案5】:

您不需要单引号或撇号来括住列名,因为这些数据不会替换为变量。当我们想用数据替换列时需要撇号,这里是值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2019-05-16
    • 1970-01-01
    • 1970-01-01
    • 2016-10-16
    相关资源
    最近更新 更多