我的数据库中有一个名为urlOne
的字段。如果它有一个URL作为值,我希望它只回显html。这是我的代码:
$id = $_REQUEST['id'];
$query = "SELECT * FROM sites WHERE id = $id LIMIT 1";
$result = mysql_query($query);
$url = $row['urlOne'];
while($row = mysql_fetch_assoc($result)){
echo "<section class='prop-desc'>";
echo $desc;
echo "</section>";
$result = mysql_query("SELECT * FROM sites WHERE $id LIMIT 1");
if(!empty($row['urlOne'])){
echo "<h4 class='cta'><a href='$url'>Launch Site</a></h4>"
}
}
答案 0 :(得分:2)
虽然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']);
注意: - 您应该具体说明$ _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的使用。
答案 1 :(得分:0)
第一。你在echo语句结束时错过了;
。我不确定,是否是复制粘贴问题。
秒。为什么不检查$ url。如果它全部是关于$ url打印
if(!empty($url)){
echo "<h4 class='cta'><a href='$url'>Launch Site</a></h4>";
}