簡體   English   中英

當嘗試使用INNER JOIN關聯兩個表時,我的php模板中的foreach()錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM