【问题标题】:Keep getting error when trying inserting form data into database with PDO尝试使用 PDO 将表单数据插入数据库时​​不断出错
【发布时间】:2015-05-27 18:24:46
【问题描述】:

首先是我的代码:

database.php(已建立连接,因此我可以与 require 一起使用)

<?php 
$servername = "localhost";
$username = "root";
$password = "root";
$port = 8889;
$database = "oopdb";

try{
$conn = new PDO("mysql:host=$servername; dbname=$database; port=$port", $username, $password);
 // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $conn->exec("SET NAMES 'utf8'");

}catch(Exception $e){
      echo "Error: " . $e->getMessage();
      exit;
    }
?>

然后是我的主 PHP 文件,格式为:

<!DOCTYPE html>
<html>
<head>
<title>Forms with PDO</title>
</head>

<body>
<?php 

require("database.php");
if(isset($_POST['submit'])){

try{

  // prepare and bind
$stmt = $conn->prepare("INSERT INTO clients (phonenumber, firstname, lastname, address, note) VALUES (:phonenumber, :firstname, :lastname, :address, :note)");
$stmt->bindParam(':phonenumber', $phonenumber, PDO::PARAM_STR);
$stmt->bindParam(':firstname', $firstname, PDO::PARAM_STR);
$stmt->bindParam(':lastname', $lastname, PDO::PARAM_STR);
$stmt->bindParam(':address', $address, PDO::PARAM_STR);
$stmt->bindParam(':note', $note, PDO::PARAM_STR);


    // set parameters and execute
if(isset($_POST['phonenumber'])){ $phonenumber = $_POST['phonenumber']; }
if(isset($_POST['firstname'])){ $firstname = $_POST['firstname']; }
if(isset($_POST['lastname'])){ $lastname = $_POST['lastname']; }
if(isset($_POST['address'])){ $address = $_POST['address']; }
if(isset($_POST['note'])){ $note = $_POST['note']; }
$stmt->execute();

}catch (Exception $e) {
        echo "$e";
        exit;
    }
}
?>

<h2>The Form</h2>
<hr />
<br />
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
Number: <input type="text" name="number" value="" />
<br /><br />
First Name: <input type="text" name="firstname" value="" />
<br /><br />
Last Name: <input type="text" name="lastname" value="" />
<br /><br />
Address: <input type="text" name="address" value="" />
<br /><br />
Notes: <input type="text" name="notes" value="" />
<br /><br />
<input type="submit" name="submit" value="Submit">
</form>
<br />
<hr />

</body>
</html>

所以我试图将表单中的数据插入到我的数据库中,但我不断收到此错误:

带有消息“SQLSTATE[23000]:完整性”的异常“PDOException” 违反约束:1048 列“电话号码”不能为空 /Users/lucasantos/Sites/oop_testing/form.php:32 堆栈跟踪:#0 /Users/lucasantos/Sites/oop_testing/form.php(32): PDOStatement->execute() #1 {main}

真的不明白这是怎么回事,我重新检查了代码并在线检查了错误,找不到任何相关的东西。请帮忙。

一些附加信息:

- 如果这很重要,我将通过 MAMP 在本地主机上执行此操作。

- 我也有一列表示该行的 id,但我没有包含它,因为它设置为自动递增。

谢谢!

【问题讨论】:

  • 这意味着您在表定义中为phonenumber 设置了not null,更改表并将其设置为null
  • 我做到了,它奏效了!虽然只有一个问题。我在表单中输入的电话号码和备注不是数据库表中显示的内容。它在我的表中显示 phonenumber 和 note 为 NULL(但不是其余数据)
  • 您的表单字段名为number,但您正在检查$_POST['phonenumber']
  • notenotes 相同。
  • 该死的错别字。非常感谢你们真的很感激!!

标签: php mysql database pdo error-handling


【解决方案1】:

我看到您使用的html输入名称如下:

<input type="text" name="number" value="" />

但是在您的 php 代码中,您在电话号码字段中使用了不同的名称

// set parameters and execute
if(isset($_POST['phonenumber'])){ $phonenumber = $_POST['phonenumber']; }

将输入字段的 HTML 名称更改为“phonenumber”,看看是否能解决问题。

【讨论】:

  • 感谢 billgwakisa 的提醒,非常感谢。 @nlu 为我指出了这一点。再次感谢
猜你喜欢
  • 1970-01-01
  • 2012-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多