PDO写入数据

数据库的表结构。

create table stuInfo(id int(4) primary key auto_increment,
                     major varchar(10),
                     name  varchar(5),
                     locality  varchar(4),
                     readingway  varchar(3),
                     pid      int(18),
                     phone int(11),
                     email varchar(25),
                     fname  varchar(5),
                     fphone int(11),
                     mname  varchar(5),
                     mphone   int(11),
                     nonename   varchar(5),
                     nonephone  int(11));

处理表单的文件

<html>
<body>
<?php
print_r($_POST);
#$hostname='localhost';
#$dbname='stuInfo';
#$username='root';
#$password='xxxx';
#
#try {
#    $conn = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);
#    // set the PDO error mode to exception
#    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
#    $sql = "INSERT INTO stuInfo (major,name,locality,readingway,pid,phone,email,fname,fphone,mname,mphone,nonename,nonephone)".
#           "VALUES (:major,:name,:locality,:readingway,:pid,:phone,:email,:fname,:fphone,:mname,:mphone,:nonename,:nonephone)";
#    $statement=$conn->prepare($sql);
#    $statement->execute($_POST)
#    echo "New record created successfully";
#    }   
#catch(PDOException $e) 
#    {   
#    echo $sql . "<br>" . $e->getMessage();
#    }   
#
#$conn->close();
?>
</body>
</html>

发送表单后,有结果

 Array ( [major] => 物理 [name] => test [locality] => 广东 [readingway] => 跟班 [pid] => 123456 [phone] => 123456 [email] => xxxx@xx.com [fname] => test [fphone] => 123456 [mname] => test [mphone] => 123456 [nonename] => test [nonephone] => 123456 ) 

现在,改变处理表单的文件--消除每行开头的注释符号。

<html>
<body>
<?php
print_r($_POST);
$hostname='localhost';
$dbname='stuInfo';
$username='root';
$password='xxxx';

try {
    $conn = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "INSERT INTO stuInfo (major,name,locality,readingway,pid,phone,email,fname,fphone,mname,mphone,nonename,nonephone)".
           "VALUES (:major,:name,:locality,:readingway,:pid,:phone,:email,:fname,:fphone,:mname,:mphone,:nonename,:nonephone)";
    $statement=$conn->prepare($sql);
    $statement->execute($_POST)
    echo "New record created successfully";
    }
catch(PDOException $e)
    {
    echo $sql . "<br>" . $e->getMessage();
    }

$conn->close();
?>
</body>
</html>

表单再次发送后,注意
1。print_r($_POST) 没有执行
为何,这个应当执行吧,无论后面是否有错

2。为何try catch 无法获得错误输出?

3。正确的写法应当是怎样?

阅读 3k
1 个回答
新手上路,请多包涵

因为你的代码写错了,你应该将错误提示都关闭了,所以没有看到,'$statement->execute($_POST)'后面少了分号,代码触发了编译时的语法解析错误,所以这段代码都不运行了;
而try、catch是捕获异常,异常是出现正常逻辑之外的情况;
你的try、catch写法没错,只是语法错了,深入了解一下错误和异常的差别。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题