php - MySQL/PHP 中如果字段为空则隐藏该字段

标签 php mysql

我的数据库中有一个名为 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并使用 PDOMySQLi

如果您无法决定,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 的故事,所以这里是:-

enter image description here

要继续您的代码:-

$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/

相关文章:

php - MediaWiki (IIS) - CSS 加载不正确

php - 如何在 PhpMyAdmin 上启用服务器选择?

php - 刷新 PHP include()

Symfony 2 中的 PHP 5.3 命名空间

java - hsqldb 中的 mysql 方言

mysql - Codeigniter + Doctrine 和太多 mysql 连接

mysql - 如何将 ROW_FORMAT=DYNAMIC 应用于现有表

php - 登录页面表单向 php 脚本返回空字符串

php - PayPal IPN - PHP 和 MySQL

php - Mysql相同字段但不同条件的总和