セキュリティを強化するため、mysqlコードを含む単純なphpをPDOに変換することをセキュリティで決定しました。古いコード:
$host = "localhost";
$user = "username";
$pass = "pass";
$database = "mydatabase";
$linkID = mysql_connect($host, $user, $pass) or die("Could not connect to host.");
mysql_select_db($database, $linkID) or die("Could not find database.");
$name=$_POST['name'];
$message=$_POST['message'];
$ip = $_SERVER['REMOTE_ADDR'];
$query="INSERT INTO table (date_time, name, message,ip) VALUES (NOW(),'$name','$message','$ip')";
If (mysql_query($query,$linkID)){
//Success
}else{
//Failure
}
私の新しいコードは次のとおりです。
$hostname = 'localhost';
$username = 'username';
$password = 'pass';
$dbname = 'mydatabase';
$dbh = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);
if($_POST['name'] && $_POST['message']) {
$name = $_POST['name'];
$message = $_POST['message'];
$ip = $_SERVER['REMOTE_ADDR'];
$sql = "INSERT INTO table (date_time, name, message,ip)VALUES (NOW(), :name, :message,'$ip')";
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':name', $name, PDO::PARAM_STR);
$stmt->bindParam(':message', $message, PDO::PARAM_STR);
if ($stmt->execute()) {
echo "OK";
}
}
ブラウザでindex.php?name = someName&message = someMessageを指定すると、PDOコードが1つ(でもecho "ok"
)またはエラーをエコーしないため、問題がどこにあるかを突き止めることができるのは非常に奇妙です。
データベースにデータが挿入されていないことを確認できます。
try catchを追加しましたが、何も変更されていません。私のphpはPDOをサポートしており、単純なMysqlコードが機能しています。何か案は?ありがとう