【问题标题】:How to get single value from MySQL query in PHP如何在 PHP 中从 MySQL 查询中获取单个值
【发布时间】:2015-03-29 08:10:56
【问题描述】:

我知道这篇文章与许多其他 Stack Overflow 问题相似。但是,他们完全没有帮助解决这个问题。我希望查询返回单个值并将其存储在变量中。 SQL 查询在数据库中运行良好,但不适用于 PHP。我这里哪里出错了?

$datelink = $_GET['bdate'];
$nid = $mysqli->query("select `newsletterId` from `newsletter` where ndate='$datelink'")->fetch_object()->name;  

【问题讨论】:

  • 你选择newsletterId 并获取name ?
  • @Mario,我这样做了,但没用.. $nid = $mysqli->query("select newsletterId from newsletter where ndate='30-01-2015'" )->fetch_object()->newsletterId;
  • 您的代码容易受到 SQL 注入攻击。请阅读:stackoverflow.com/questions/60174/…
  • @Nephil: 如果ndateDATE 列(它应该是,因为你用它来存储日期)你需要使用yyyy-mm-dd 日期格式,比如@ 987654330@。使用其他格式时不会得到结果。
  • @Arjan 如果我想将它用作字符串类型怎么办?

标签: php mysql sql


【解决方案1】:

您应该在查询数据库之前启动连接。

$mysqli = new mysqli("example.com", "user", "password", "database");
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: " . $mysqli->connect_error;
}

从 $_GET 中附加字符串也很危险。您的网站可能会受到 SQL 注入攻击。您绝对应该将PDO 与准备好的语句一起使用。或者其他类似的库,例如我喜欢dibi

更新: 您正在访问不存在的列 name。 它应该发出通知(PHP Notice: Undefined property: stdClass::$name)。如果您没有看到通知并且您正在本地开发(而且您肯定应该),您可以在 php.ini 文件中使用 error_reporting = E_ALL 启用它。

您可能想要列newsletterId。 总之:

$mysqli = new mysqli('example.com', 'user', 'password', 'database');
if ($mysqli->connect_errno) {
    echo 'Failed to connect to MySQL: ' . $mysqli->connect_error;
}
$dateRaw = $_GET['bdate']; // for example '22.12.2012', if this value is already in format YYYY-MM-DD, you can step next line and use it
$date = date('Y-m-d', strtotime($dateRaw));


$statement = $mysqli->prepare("SELECT `newsletterId` FROM `newsletter` WHERE `ndate`=? LIMIT 1");
$statement->bind_param('s', $date); // replace the question mark with properly escaped date
$statement->execute();
$result = $statement->get_result();

if ($result->num_rows) {
    $newsletterObject = $result->fetch_object();
    $newsletterId = $newsletterObject->newsletterId; // you had $newsletterObject->name here
} else {
    echo "Newsletter with the date doesn't exist";
}
$statement->close();

【讨论】:

  • 相当肯定mysqli supports prepared statements;他不需要切换库,只需要适当地使用它。
  • 我检查了连接 .. 似乎还可以,但无法正常工作
  • @Nephil,你的数据库架构(结构)是什么?
  • @xxdavid ,这里是:newsletterId smallint(6) ndate date edition tinytext pdfURL text webURL mediumtext hasRadio tinyint(1) radioLink text welcomeNote mediumtext 诗 mediumtext
  • 非常感谢 xxdavid,但是我设法使用完整的 while 循环算法得到它,并且我也发布了解决方案......
【解决方案2】:
$datelink=$_GET['bdate'];
$nid= $mysqli->query("SELECT `newsletterId` FROM `newsletter` WHERE ndate='$datelink' LIMIT 1")->fetch_object()->name;

【讨论】:

    【解决方案3】:

    最初我认为有一种简单的方法可以获取单个值,但找不到。所以必须使用下面的完整代码来获取值。

    $sql3="select newsletterId from newsletter where ndate='$bdate' limit 1";
    $result3 = $conn->query($sql3);
        if ($result3->num_rows > 0) {
    
        while($row3 = $result3->fetch_assoc()) {                    
        $nid=$row3['newsletterId']; //Here is where the single value is stored.
    
        }
        } else {
            echo "0 results";
        }
    

    【讨论】:

    猜你喜欢
    • 2014-11-13
    • 2013-10-22
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多