【问题标题】:PDO statement not inserting into database [duplicate]PDO 语句未插入数据库 [重复]
【发布时间】:2017-02-21 23:10:00
【问题描述】:

您好,我有这段代码不起作用。我一直在窃听它大约一个小时,似乎找不到任何错误,我不知道它是什么。也许有人可以在这里帮助我。

插入脚本:

    <?php error_reporting(E_ALL); ini_set('display_errors',1);
require('connect.php');

$sql = "INSERT INTO products (name, description, price, url, category, artwork) VALUES ('john', 'john', 'john', 'john', 'john', 'john')";
if ($link->query($sql)) {
  echo "<script>
  alert('Data was added.');
  window.location.href='dashboard.php';
  </script>";
}
else {
  echo "<script>
  alert('Data was not added.');
  window.location.href='dashboard.php';
  </script>";
}
 ?>

我正在尝试将数据添加到我的数据库中,但它不会添加我提供的数据。

这是我的连接脚本:

    <?php

try {
  $dbhost = 'localhost';
  $dbuser = 'root';
  $dbpass = '';
  $link = new PDO("mysql:host=$dbhost;dbname=dbtesttest;",$dbuser,$dbpass);

} catch (PDOException $e) {
  echo "Failed :" . $e->getMessage() . "\n";
}

?>

有人知道我做错了什么吗?除了在 php.ini 中使用警报。 它没有给我任何错误,我有一个使用实际属性制作的数据库。我需要帮助:(

【问题讨论】:

  • 您是否检查过查询是否有效?首先想到的是在数字字段中输入一个字符串(价格 -> 'john')
  • 尝试使用准备好的语句并在准备好后执行您的查询。更多这里php.net/manual/en/pdo.prepared-statements.php
  • “行不通”是什么意思?你有一个 if/then/else 语句——执行了哪个代码分支?

标签: php database pdo insert statements


【解决方案1】:

让我们尝试简化问题。您似乎没有返回数据库连接。为了让您更好地理解,我们可以从同一个脚本中调用数据库(我们可以在它工作后将其移出,因为我们都喜欢重构,不是吗?)

try {
  $dbhost = 'localhost';
  $dbuser = 'root';
  $dbpass = '';
  $link = new PDO("mysql:host=$dbhost;dbname=dbtesttest;",$dbuser,$dbpass);

//在try块中设置连接属性

 $link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


} catch (PDOException $e) {
  echo "Failed :" . $e->getMessage() . "\n";
}

然后改变这一行

$link->query($sql)

$stmt = $link->prepare($sql);
$stmt->execute();

上面的所有内容现在都应该放在你的 try 块中,并且插入应该可以工作,否则它将返回更详细的错误。希望这会让您继续前进并帮助您解决问题。 link 对 php/mysql CRUD 操作有很好的了解。

【讨论】:

  • 直接调用$link-&gt;query有什么问题?为什么您认为准备一份声明会有所帮助?
  • 我不认为这是错误的,但对于 OP 来说,它应该可以帮助他辨别正在发生的事情并希望更好地了解操作。我相信在编写插入/更新/删除语句而不是选择时,它也读起来更好,因为查询通常与查询相关联。这个link 详细解释了不同之处。
  • 答案应该是回答问题,而不是解决问题或让事情“更好地阅读”。一旦获得更多代表,您就可以对问题发表评论以寻求澄清或提供调试建议。
【解决方案2】:

我认为你应该使用 $link->exec($sql);

【讨论】:

  • 你为什么这么认为?提供的内容不仅仅是通过评论,没有任何支持。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-16
  • 1970-01-01
  • 1970-01-01
  • 2014-12-14
  • 1970-01-01
  • 2017-09-19
相关资源
最近更新 更多