如何从PHP中获取MySQL查询的单值

时间:2015-01-29 22:32:59

标签: php mysql sql

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

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

3 个答案:

答案 0 :(得分:0)

$datelink=$_GET['bdate'];
$nid= $mysqli->query("SELECT `newsletterId` FROM `newsletter` WHERE ndate='$datelink' LIMIT 1")->fetch_object()->name;

答案 1 :(得分:0)

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

$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.inierror_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();

答案 2 :(得分:0)

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

$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";
    }