所以我使用的是示例代码output6.php
我想要做的是如果empire_name
返回null,则跳过关联的行
任何想法或建议将不胜感激
谢谢!
<!DOCTYPE html>
<html>
<body>
<?php
echo "<table style='border: solid 1px black;'>";
echo "<tr>
<th>Empire Name</th>
<th>Win?</th>
<th>Building 1</th>
<th>Building 2</th>
<th>Building 3</th>
<th>Building 4</th>
<th>Building 5</th>
<th>Building 6</th>
<th>Building 7</th>
<th>Building 8</th>
<th>Building 9</th>
</tr>";
class TableRows extends RecursiveIteratorIterator {
function __construct($it) {
parent::__construct($it, self::LEAVES_ONLY);
}
function current() {
return "<td style='width: 150px; border: 1px solid black;'>" . parent::current(). "</td>";
}
function beginChildren() {
echo "<tr>";
}
function endChildren() {
echo "</tr>" . "\n";
}
}
$servername = "xxx";
$username = "xxx";
$password = "xxx";
$dbname = "xxx";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT empire_name, win, building_1, building_2, building_3, building_4, building_5, building_6, building_7, building_8, building_9 FROM ft_form_2 ");
$stmt->execute();
// set the resulting array to associative
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
echo $v;
}
}
catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
$conn = null;
echo "</table>";
?>
</body>
</html>
我试过这个,但我不知道该怎么找
谢谢!
我目前的结果null = blank rows, image link
我认为这很接近...... PDO and IS NOT NULL Function 但我不确定如何在当前代码中实现(我尝试了一些变体)
不同的变体 - 相同的结果(output3.php)更接近期望的最终结果
<?php
define("DB_HOST", "xxx"); // Using Constants
define("DB_USER", "xxx");
define("DB_PASS", "xxx");
define("DB_NAME", "xxx");
try { // << using Try/Catch() to catch errors!
$dbc = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset-utf8",DB_USER,DB_PASS);
}catch(PDOException $e){ echo $e->getMessage();}
if($dbc <> true){
die("<p>There was an error</p>");
}
$print = ""; // assign an empty string
$stmt = $dbc->query("SELECT * FROM ft_form_2"); // fetch data
$stmt->setFetchMode(PDO::FETCH_OBJ);
if($stmt->execute() <> 0)
{
$print .= '<table border="1px">';
$print .= '<tr><th>Empire_Name</th>';
$print .= '<th>Win</th>';
$print .= '<th>Building_1</th>';
$print .= '<th>Building_2</th>';
$print .= '<th>Building_3</th>';
$print .= '<th>Building_4</th>';
$print .= '<th>Building_5</th>';
$print .= '<th>Building_6</th>';
$print .= '<th>Building_7</th>';
$print .= '<th>Building_8</th>';
$print .= '<th>Building_9</th> </tr>';
while($ft_form_2 = $stmt->fetch()) // loop and display data
{
$print .= '<tr>';
$print .= "<td>{$ft_form_2->empire_name}</td>";
$print .= "<td>{$ft_form_2->win}</td>";
$print .= "<td>{$ft_form_2->building_1} <br> {$ft_form_2->building_1_notes} </td>";
$print .= "<td>{$ft_form_2->building_2} <br> {$ft_form_2->building_2_notes} </td>";
$print .= "<td>{$ft_form_2->building_3} <br> {$ft_form_2->building_3_notes} </td>";
$print .= "<td>{$ft_form_2->building_4} <br> {$ft_form_2->building_4_notes} </td>";
$print .= "<td>{$ft_form_2->building_5} <br> {$ft_form_2->building_5_notes} </td>";
$print .= "<td>{$ft_form_2->building_6} <br> {$ft_form_2->building_6_notes} </td>";
$print .= "<td>{$ft_form_2->building_7} <br> {$ft_form_2->building_7_notes} </td>";
$print .= "<td>{$ft_form_2->building_8} <br> {$ft_form_2->building_8_notes} </td>";
$print .= "<td>{$ft_form_2->building_9} <br> {$ft_form_2->building_9_notes} </td>";
$print .= '</tr>';
}
$print .= "</table>";
echo $print;
}
?>
答案 0 :(得分:1)
遵循您在问题中提到的使用IS NOT NULL的逻辑。你是在正确的道路上。从数据库中返回正在寻找的内容比获取所有内容并在PHP中过滤它更有效。
你的陈述
$stmt = $conn->prepare("SELECT empire_name, win, building_1, building_2, building_3, building_4, building_5, building_6, building_7, building_8, building_9 FROM ft_form_2 ");
你可以在最后添加where条件
$stmt = $conn->prepare("SELECT empire_name, win, building_1, building_2, building_3, building_4, building_5, building_6, building_7, building_8, building_9 FROM ft_form_2 WHERE empire_name IS NOT NULL ");
然后您的数据库将进行过滤。同样可以应用于您的第二个示例。
$stmt = $dbc->query("SELECT * FROM ft_form_2 WHERE empire_name IS NOT NULL");
答案 1 :(得分:-1)
在打印行之前简单添加检查。跟随之类的东西。
while($ft_form_2 = $stmt->fetch()) // loop and display data
{
if( !empty($ft_form_2->empire_name) && !is_null($ft_form_2->empire_name) )
{
$print .= '<tr>';
$print .= "<td>{$ft_form_2->empire_name}</td>";
$print .= "<td>{$ft_form_2->win}</td>";
$print .= "<td>{$ft_form_2->building_1} <br> {$ft_form_2->building_1_notes} </td>";
$print .= "<td>{$ft_form_2->building_2} <br> {$ft_form_2->building_2_notes} </td>";
$print .= "<td>{$ft_form_2->building_3} <br> {$ft_form_2->building_3_notes} </td>";
$print .= "<td>{$ft_form_2->building_4} <br> {$ft_form_2->building_4_notes} </td>";
$print .= "<td>{$ft_form_2->building_5} <br> {$ft_form_2->building_5_notes} </td>";
$print .= "<td>{$ft_form_2->building_6} <br> {$ft_form_2->building_6_notes} </td>";
$print .= "<td>{$ft_form_2->building_7} <br> {$ft_form_2->building_7_notes} </td>";
$print .= "<td>{$ft_form_2->building_8} <br> {$ft_form_2->building_8_notes} </td>";
$print .= "<td>{$ft_form_2->building_9} <br> {$ft_form_2->building_9_notes} </td>";
$print .= '</tr>';
}
}
或者
您可以在查询中添加WHERE
个原因。喜欢以下
WHERE empire_name IS NOT NULL AND empire != ''