虽然Rab Nawaz 的回答有效,但它并不真正正确。
mysql_*
功能不再维护,社区已开始弃用过程。相反,您应该了解准备好的语句并使用PDO或MySQLi。
如果你不能决定,这篇文章应该可以帮助你选择。虽然,您应该知道,PDO 能够与不同类型的 RDBMS 一起工作,而 MySQLi 是为特定的 RDBMS 设计的。如果您决定使用 PDO,建议您遵循本教程。
对于您的特定情况,您的代码应该看起来更像这样:-
$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']);
注意:-您应该指定 $_POST 或 $_GET;因为 $_REQUEST 可能来自任何一个,您应该始终知道您的输入来自哪里。
应始终验证用户输入,您的方法使您对 SQL 注入敞开大门,因此someMethodOfValidation()
您需要编写适合您预期输入的位。在您的情况下,您似乎期望一个整数值,因此您的验证可能像$id = (int)$_POST['id'];
.
在谈论 SQL 注入时,传统的做法是讲述 Little Bobby Tables 的故事,所以这里是:-
要继续您的代码:-
$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。