Can't connect to MySQL server with PDO
本问题已经有最佳答案,请猛点这里访问。
我正在尝试使用PDO阻止SQL注入,但我似乎无法连接。 这是工作版本 - 而不是SQL注入安全:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <html> <head> Insert data into database </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
并按照指南编写了以下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | <html> <head> Insert data into database </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
但结果是一样的 - 没有错误消息的空白页面。
我究竟做错了什么?
你正在为
根据您的连接,它应该是
使用错误报告后,将签署一个未定义的变量dbh notice / warning。
您也不能将
请参见示例#3关闭手册http://php.net/manual/en/pdo.connections.php中"连接和连接"的连接
另一件事
编辑:你在这一行忘记了一个分号:
1 | echo"You have connected to the database server with PDO" |
应该读作
1 | echo"You have connected to the database server with PDO"; |
这会打破你的代码。
错误报告也会捕获该语法/解析错误。
- http://php.net/manual/en/function.error-reporting.php
将错误报告添加到文件的顶部,这将有助于查找错误。
1 2 3 4 5 |
旁注:错误报告应该只在暂存中完成,而不是生产。