如果条件匹配则输出一个结果

时间:2017-08-10 15:54:49

标签: php mysql

我觉得这可能很简单,但却看不到它!

我已经构建了一个将结果保存到数据库表中的测试。目前,它为每次测试都节省了一排。可以进行测试,直到它通过。

目前它输出的每一个结果(因为它循环遍历表格中的每个结果)。

如果$row['testname'];的输出为" Pass"?

,我怎么能只输出一次$row['pass-fail'];
<?php $current_user = wp_get_current_user();
$user = $current_user->user_login;

require("database.php");
// Opens a connection to a MySQL server
$con = mysql_connect("localhost", $username, $password);
if (!$con) {
    die('Could not connect: ' . mysql_error());
}

mysql_select_db("tester", $con);
$sql = mysql_query("SELECT * FROM test WHERE name='$user' ORDER BY Date DESC");
if (!$sql) {
  die('Error: ' . mysql_error());
} ?>

    <?php while($row = mysql_fetch_array($sql)) { ?>


        <p><?php $testname = $row['testname']; echo get_the_title( $testname ); ?> - <?php echo $row['pass-fail']; ?></p>


    <?php } ?>

<?php mysql_close($con); ?> 

1 个答案:

答案 0 :(得分:4)

在查询中使用WHERE子句仅选择pass-fail等于“Pass”的子句。另外,使用准备好的陈述。

$current_user = wp_get_current_user();
$user = $current_user->user_login;

require("database.php");

// Opens a connection to a MySQL server
$conn = new mysqli("localhost", $username, $password, "tester");

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$stmt = mysqli_prepare($conn, "SELECT * FROM `test` WHERE `name`=? AND `pass-fail`='Pass' ORDER BY `Date` DESC");
$stmt->bind_param("s", $user);
$stmt->execute();
$result = $stmt->get_result();

while($row = $result->fetch_assoc()) {
    $testname_title = get_the_title($row['testname']);
    echo "<p>{$testname_title}</p>";
}

$conn->close();

为此,您必须拥有the mysqlnd driver

如果您没有这个,我建议PDO(IMO,一般来说也更容易使用) - 如果您需要帮助学习如何使用PDO进行安全可靠的查询,那么您可以查看this answer that I wrote,其中展示了我撰写的一项功能,该功能使Prepared Statements 轻松清洁安全。或者,您可以详细了解Prepared Statements for MySQLi