-5

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 データベースに入れる正しい表記法は何ですか?

4

2 に答える 2

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を確認することをお勧めします。

セキュリティの考慮事項

DB ドライバーがネイティブの準備済みステートメントを使用できない場合、エミュレートされた準備済みステートメントにフォールバックします (安全性が低い可能性があります)。ドキュメントから:

PDO::ATTR_EMULATE_PREPARES準備済みステートメントのエミュレーションを有効または無効にします。一部のドライバーは、ネイティブの準備済みステートメントをサポートしていないか、それらのサポートが制限されています。この設定を使用して、PDO が常に準備済みステートメントをエミュレートする (TRUE の場合) か、ネイティブの準備済みステートメントを使用しようとする (FALSE の場合) ように強制します。ドライバーが現在のクエリを正常に準備できない 場合、常に準備済みステートメントのエミュレートにフォールバックします。ブール値が必要です。

于 2013-08-30T23:58:06.250 に答える