我的数据库中有一个名为 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>"
}
}
最佳答案
同时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 注入(inject)敞开大门,因此您需要编写一些 someMethodOfValidation()
位来适应您的预期输入。在您的情况下,您似乎需要一个整数值,因此您的验证可以像 $id = (int)$_POST['id'];
一样简单。
传统上,当谈论 SQL 注入(inject)时,都会讲述 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。
关于php - MySQL/PHP 中如果字段为空则隐藏该字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11401345/