2015-12-10 215 views
-2

誰能告訴我我在這裏做錯了什麼? 我是PDO的新手,需要學習如何使用bindValue插入,但是當我點擊提交時,沒有任何東西被添加到我的數據庫中。甚至不顯示錯誤。PDO,PHP和MySQL

任何人都可以舉個例子。 下面是我的代碼:

<!DOCTYPE html> 
<html lang="eng"> 
<head><title>PDO INSERT TEST</title> 
<meta http-equiv="CONTENT-TYPE" CONTENT="text/html;charset=utf-8"/> 
</head> 
<body> 
<form action="PDO_test1.php" method="POST"> 
<p>Name: <input type="text" name="userName" id="Name"/></p> 
<p>Last: <input type="text" name="userLast" id="Last"/></p> 
<input type="submit" name="submit" value="submit"> 
</form> 
</body> 
</html> 

<?php 
    # basic pdo connection (with added option for error handling) 
    if (isset($_POST['submit'])) { 

     require_once 'includes/PDO_connect.php'; 
     try { 
      $dsn = "mysql:host=$servername;dbname=$dbname"; 
      $dbc = new PDO($dsn, $username, $password); 
      //You can echo out connected to db message 
      $dbc->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

      $query = $dbc->prepare("INSERT INTO `PdoTest1` (userName,userLast,reqistration_date) VALUES (?, ?, ?)"); 
      # If we leave out the third parameters, it is set to 
      # PDO::PARAM_STRING by default 
      $query->bindValue(':userName', '%' . $_POST['userName'] . '%'); 
      $query->bindValue(':userLast', '%' . $_POST['userLast'] . '%'); 
      $dbc = null; 
     } 

     catch (PDOException $e) { 
      echo $e->getMessage(); 
     } 
     //echo "<p>Data submitted successfully</p>"; 
    } 
?> 
+0

我的語法在數據庫中沒有插入任何內容。我甚至不知道,如果它看起來是有道理的。我沒有得到任何錯誤.. –

+0

你不顯示錯誤gived。但請注意,您不要設置查詢的第三個參數,而且您不會執行查詢'$ query-> execute()'。 – Gonzalo

+0

我很驚訝你沒有從使用錯誤的佔位符中得到錯誤。 '?'和':var'不要混合。以及爲什麼「%」?那就是LIKE語法。 –

回答

0

你應該閱讀手冊中給出的例子:

http://php.net/manual/es/pdostatement.bindvalue.php

他們會幫助你很多。閱讀他們,你可以改變你的代碼是這樣的:

$query = $dbc->prepare("INSERT INTO `PdoTest1` (userName,userLast,reqistration_date) 
VALUES (?, ?, NOW())"); 
# If we leave out the third parameters, it is set to 
# PDO::PARAM_STRING by default 
$query->bindValue(1, $_POST['userName']); 
$query->bindValue(2, $_POST['userLast']); 
$query->execute(); 

或者,如果你preffer其他sintax:

$query = $dbc->prepare("INSERT INTO `PdoTest1` (userName,userLast,reqistration_date) 
VALUES (:username, :userLast, NOW())"); 
# If we leave out the third parameters, it is set to 
# PDO::PARAM_STRING by default 
$query->bindValue(':username', $_POST['userName']); 
$query->bindValue(':userLast', $_POST['userLast']); 
$query->execute(); 
+0

得到它@Gonzalo ..謝謝SOOO非常! –

+0

如何安全的是這種方法,我們只是工作在VS SQL注入攻擊? –

+0

好答案在這裏:http://stackoverflow.com/questions/134099/are-pdo-prepared-statements-sufficient-to-prevent-sql-injection – Gonzalo