[英]foreach() error in my php template when trying to relate two tables using INNER JOIN
我在閱讀Kevin Yank的書“ Ninja 5版本的PHP和MySQL新手 ”,發現代碼中有錯誤,希望有人幫我解決這個問題,也許是一個愚蠢的錯字...?
我正在嘗試遵循作者創建和訪問笑話數據庫的示例。 我正在學習如何加入兩個數據庫以用php顯示所有笑話的列表。 我有兩個數據庫笑話和作者。 我有這個:
try{
$sql = 'SELECT joke.id, joketext, jokedate, name, email
FROM joke INNER JOIN author
ON authorid = author.id';
$result = $pdo->query($sql);
}
catch (PDOException $e)
{
$error = 'Error: ' . $e->getMessage();
include 'error.html.php';
exit();
}
foreach ($result as $row)
{
$jokes[] = array(
'id' => $row['id'],
'text' => $row['joketext'],
'date' => $row['jokedate'],
'name' => $row['name'],
'email' => $row['email']
);
}
include 'jokes.html.php';
現在,一切正常,直到我替換了簡單的代碼以從一個表中選擇數據庫信息,再替換為INNER JOIN代碼。 這是我一直遵循的代碼。
在jokes.html.php文件中,我得到了這個(我認為這是給我錯誤的原因):
foreach($jokes as $joke):
<form action="?deletejoke" method="post">
<?php
echo 'id. ';
echo htmlspecialchars($joke['id'], ENT_QUOTES, 'UTF-8');
echo htmlspecialchars($joke['date'], ENT_QUOTES, 'UTF-8');
echo htmlspecialchars($joke['text'], ENT_QUOTES, 'UTF-8');
echo htmlspecialchars($joke['name'], ENT_QUOTES, 'UTF-8');
echo htmlspecialchars($joke['email'], ENT_QUOTES, 'UTF-8');
?>
<input type="hidden" name="id" value="<?php echo $joke['id'];?>">
<input type="submit" value="Borrar">
?>
<br></form>
<?php endforeach; ?>
現在,引發我的錯誤是:
注意:未定義變量:在第10行的C:\\ xampp \\ htdocs \\ workspace1 \\ jokes.html.php中開玩笑
警告:在第10行的C:\\ xampp \\ htdocs \\ workspace1 \\ jokes.html.php中為foreach()提供了無效的參數
jokes.html.php的第10行是:
foreach($jokes as $joke):
我正在嘗試獲取有關foreach()的更多信息,但我無法發現錯誤……如果有人可以幫助我(或提供線索!),我將不勝感激。 謝謝!!! 羅薩蒙達
更新:
由於查詢的結果(直接從phpmyadmin嘗試)為零,因此該查詢沒有數據庫結果。 我決定手動添加一個執行此操作的結果:
INSERT INTO joke SET
joketext = 'this is a new joke....',
jokedate = '2012-01-01',
authorid = 1;
現在,錯誤消失了,而且確實顯示了單個結果。
我不明白的是:
為什么不顯示結果而不顯示錯誤?
您如何處理這些情況? 我的意思是,查詢可能根本沒有結果,這會導致這些錯誤嗎?
您的一條有用的評論說$ result為空...那么為什么當查詢不為零時這些錯誤不會出現?
再次感謝你的幫助!!! 羅薩蒙達
我已經在SitePoint論壇(Book's論壇)中找到了答案,我認為最好在這里發布問題,以防萬一有人想知道,或者萬一有人碰巧有相同的問題問題。
這是因為您的php設置顯示通知和警告。 通知/警告有效,因為您在聲明/分配值之前嘗試使用$ jokes變量。 您可以通過將
$jokes = array();
來解決此問題$jokes = array();
在PHP代碼之前:foreach ($result as $row) { $jokes[] = array( 'id' => $row['id'], 'text' => $row['joketext'], 'date' => $row['jokedate'], 'name' => $row['name'], 'email' => $row['email'] ); }
如果結果為零,則至少將聲明$ jokes變量。
因此,我認為結論(如果我在這里錯了,請糾正我!)是, 您應該始終聲明任何要假裝使用的變量,以防萬一碰巧沒有結果。 因為如果為空,則會顯示令人討厭的錯誤消息,使您感到恐懼。
要聲明一個變量,可以使用$variablename = array()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.