虽然Rab Nawaz's answer工作,它是不正确的。
mysql_*
功能不再维护,社区已开始deprecation process。相反,您应该了解prepared statements并使用PDO或MySQLi。
如果你不能决定,this article应该帮你选择。但是,您应该知道,PDO可以使用不同种类的RDBMS,而MySQLi则可以使用不同的RDBMS。如果您决定使用PDO,建议您按照this tutorial。
您的特定情况下,你的代码应该看起来更像是这样的: -
$dsn = 'mysql:dbname=dbname;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
try {
$db = new PDO($dsn, $user, $password);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
$id = someMethodOfValidation($_POST['id']);
注: -你应该specificy $ _POST或$ _GET;因为$ _REQUEST可能来自任何一方,您应该始终知道您的输入来自哪里。
用户输入应该总是被验证,你的方法让你开放SQL注入,因此你需要编写someMethodOfValidation()
位,以适应你的预期输入。在你的情况,它看起来像你期待一个整数值,所以你的验证可以像$id = (int)$_POST['id'];
一样简单。
当谈论SQL注入告诉小博表的故事,所以这里是它的传统: -
要继续代码: -
$stmt = $db->prepare("SELECT * FROM sites WHERE id=:id");
$stmt->execute(array(':id' => $id));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($rows as $row){
if(!empty($row['urlone']){
echo "<h4 class='cta'><a href='{$row['urlone']}'>Launch Site</a></h4>";
}
我无法强调上面的代码是不安全的,绝不应该在活动服务器上使用。不要打扰学习使用mysql_ *函数,你会浪费你的时间。 PDO并不难学,事实上,一旦掌握了它,它就非常简单。链接到上面的教程将使您顺利地使用PDO。
你为什么不“从urlOne不为空的地方选择*”? – 2012-07-09 19:00:43
@ReyGonzales说什么。或者添加一个if块来检查你的$ url变量的值。 – 2012-07-09 19:01:32
为你发布一个新的答案http://stackoverflow.com/a/11409311/212940 – vascowhite 2012-07-10 08:22:56