【发布时间】:2015-07-19 18:13:57
【问题描述】:
我正在尝试使用 PDO 防止 SQL 注入,但我似乎无法连接。这是工作版本 - 不是 SQL 注入安全的:
<html>
<head>
<title>Insert data into database</title>
</head>
<body>
<?php
session_start();
$_SESSION['name'] = $_POST['name'];
// Connect to database server
mysql_connect("localhost", "********", "********") or die(mysql_error());
// Select database
mysql_select_db("mydatabase") or die(mysql_error());
// The SQL statement is built
$strSQL = "INSERT INTO mytable(name) VALUES('" . $_POST["name"] . "')";
// The SQL statement is executed
mysql_query($strSQL) or die (mysql_error());
// Close the database connection
mysql_close();
echo "Your name is " . $_POST["name"] ;
?>
</body>
</html>
这工作得很好。我阅读了这些关于如何使用 PDO 来防止 SQL 注入攻击的页面:
http://www.w3schools.com/php/php_mysql_connect.asp
http://www.w3schools.com/sql/sql_injection.asp
并按照指南编写以下代码:
<html>
<head>
<title>Insert data into database</title>
</head>
<body>
<?php
session_start();
$_SESSION['name'] = $_POST['name'];
$servername = "localhost";
$username = "********";
$password = "********";
try {
$conn = new PDO("mysql:host=$servername, dbname=mydatabase", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully";
}
catch(PDOException $e)
{
echo "Connection failed: " . $e->getMessage();
}
echo "You have connected to the database server with PDO"
// The SQL statement is built
$stmt = $dbh->prepare("INSERT INTO mytable (name)
VALUES (:name)");
$stmt->bindParam(':name', $_POST['name']);
$stmt->execute();
// Close the database connection
mysql_close();
echo "Your name is " . $_POST["name"] ;
?>
</body>
</html>
但是这段代码只是给了我一个空白页——没有错误信息,也没有任何东西插入数据库。
我还尝试按照
中的说明进行连接http://www.stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php
但结果是一样的 - 一个没有错误消息的空白页面。
我做错了什么?
【问题讨论】:
-
您的 http 服务器错误日志文件说明了什么?这应该始终是要查看的第一个位置。那是 php 记录错误的地方。 读取错误。修复问题。
-
@PeeHaa 副本在哪里?我同意有一些类似的,例如 stackoverflow.com/questions/15128468/… ,由于过于本地化而被关闭,这显然与我的问题不同。如果我的答案已经得到解答,我很想看到答案,但我搜索没有成功。
-
@arkascha 我不知道存在诸如服务器错误日志文件之类的东西。我在哪里可以找到它?
-
如果您在 PHP 中遇到 WSOD(白屏死机),您必须启用错误报告,这样您才能看到您的错误是什么。因此被骗了。
-
您的代码中充满了错误,错误报告会告诉您这种情况以及具体的错误。