使用PDO在MySQL中插入表单

时间:2013-08-30 23:49:31

标签: php mysql pdo

在PHP 4中,您可以将表单输入MySQL数据库,如下所示:

<form  action="script.php" method="post">
 <fieldset>
  <input id="name" name="name" type="text" placeholder="Insert your name" />
  <input type="submit" value="Opslaan" />           
 </fieldset>
</form>​    

的script.php:

$name= $_POST['name'];  
$name = stripslashes($name);  
$name = mysql_real_escape_string($name);

mysql_connect($host,$username,$password);
@mysql_select_db($database) or die( "Unable to select database");
$query = "INSERT INTO names (id, name) VALUES ('','$name')";
mysql_query($query);
mysql_close();

现在PHP 5已经出来了,使用PDO的最新标准将这个表单放在MySQL数据库中的正确表示法是什么?

2 个答案:

答案 0 :(得分:1)

这或多或少是使用PDO运行更新的最简单方法:

// database connection
$conn = new PDO("mysql:host=localhost;dbname=MyDBName",aDBUser,aDBPassword);

// Disable emulated prepared statements 
// PDO will **TRY** to use real (non-emaulated) prepared statements
$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// Some sample data
$aTitle = 'PHP Security';
$anAuthor = 'John Doe';

// Prepare a statement with some placeholders prefixed by ':'
$sql = "INSERT "
     . "  INTO books "
     . "       ( title, author   ) "
     . "VALUES ( :title, :author )"
     ;
$q = $conn->prepare($sql);

// Execute the prepared statement and replace placeholders by values
$q->execute(array(':author' => $anAuthor,
                  ':title'  => $aTitle
                 )
           );

此外,您可能希望查看OWASPPHP Security Cheat Sheet

安全考虑

如果数据库驱动程序无法使用本机预处理语句,则它会回退到模拟的预准备语句(可能不太安全)。来自docs

  

PDO :: ATTR_EMULATE_PREPARES 启用或禁用已准备好的模拟   声明。某些驱动程序不支持本机预处理语句或   对他们的支持有限。使用此设置可以强制PDO   始终模拟预准备语句(如果为TRUE),或尝试使用本机语句   准备好的陈述(如果为FALSE)。 将始终回归模拟   准备好的声明,如果驱动程序无法成功准备   当前查询。需要布尔。

答案 1 :(得分:-1)

尝试以下方法:

$mysqlconn=  new PDO('mysql:dbname=' .$database . ';host=' . $host,  $username,  $password);
$query = "INSERT INTO names (id, name) VALUES (:id,:name)";     
$statement=$mysqlconn->prepare($query);
$statement->execute(array(':id'=>null,':name'=>$name));

这是移植到PDO的逻辑的核心。你必须填补缺失的部分。