【问题标题】:Can't make MySQL queries in PHP webpage无法在 PHP 网页中进行 MySQL 查询
【发布时间】:2020-03-06 18:31:40
【问题描述】:

所以我在一个网站上工作,我需要从 MySQL 服务器中提取数据并将其显示在网页上。我编写了一个简单的 PHP 脚本来根据 URL 中传递的参数从数据库中读取数据,它工作得很好。

这是脚本:

<?php
function updator($item)
{
  $servername = "localhost";
  $username = "yaddvirus";
  $password = "password";
  $dbname = "database";

  // Create connection
  $conn = mysqli_connect($servername, $username, $password, $dbname);

  // Check connection
  if (!$conn) {
      die("Connection failed: " . mysqli_connect_error());
  }
  echo "Connected successfully";
  $table = "inventory";
  //$item = "Rose Almonds";

  $sql = "SELECT * FROM $table WHERE item = '$item'";
  $result = $conn->query($sql);

  while($data=$result->fetch_assoc()){
    echo "<h1>{$data['item']}</h1><br>";
    echo "<h1>{$data['item_desc']}</h1><br>";
    echo "<h1>{$data['price125']}</h1><br>";
    echo "<h1>{$data['price250']}</h1><br>";
  }
      //echo "0 results";
  $conn->close();
}
if (defined('STDIN')) {
  $item = $argv[1];
} else {
  $item = $_GET['item'];
}
//$item = "Cherry";
updator($item);

?>

此脚本完全按预期工作。我使用http://nutsnboltz.com/tester.php?item=itemname 调用它,它可以很好地提取和显示数据。

P.S 你可以用 Cherry 或 Blueberry 作为物品来测试一下。

问题是,当我试图将这些数据放入我的 productpage.php 文件时,我无法让数据显示出来。文件层次结构如下:

<php
*Exact same php script as above*
?>
<html>
<head>
Header and navbar come here
</head>
<body>
  <div class="container-fluid">
    <div class="row">
      <div class="col-4">
        <h1> RANDOM TEXT BEFORE </h1>
        <?php
        while($data=$result->fetch_assoc()){
          echo "<h1>{$data['item']}</h1><br>";
          echo "<h1>{$data['item_desc']}</h1><br>";
          echo "<h1>{$data['price125']}</h1><br>";
          echo "<h1>{$data['price250']}</h1><br>";
        } 
         ?>

      </div>
      <div class="col-8">
        <H!> MORE RANDOM TEXT</h1>
      </div>

    </div>
</div>
</body>
<footer>
footer here
scripts etc
</footer>
</html>

因此,页脚上方的脚本可以很好地打印所有内容。但是,在 HTML 所在的位置,在 PHP 代码之后没有打印任何内容。它只显示我的导航栏和 H1 标签,上面写着“RANDOM TEXT BEFORE”,仅此而已。我的页脚与其他所有内容一起消失了。

这究竟是什么问题,我该如何解决?

【问题讨论】:

  • 你确定你的开始标签是正确的,因为你在第二个脚本中有&lt;php
  • 我知道 mysqli_connect()mysqli::__construct() 的别名,但事实上您在程序 (mysqli_connect) 和 OOP 样式 ($conn-&gt;query()) 中都使用 mysqli边缘的牙齿......这不应该导致你的错误。你的错误听起来像是一个致命的 PHP 错误(它死了,所以你松开了页脚等),没有任何错误报告 - switch on error reporting 看看它说了什么。
  • @NigelRen 标签很好。我刚刚检查过。
  • @CD001 我完全理解你的畏惧,但目前我真的只需要启动并运行它。此外,我很确定它不会导致任何错误。
  • 是的,但是您的页脚和while($data=$result-&gt;fetch_assoc()){ 下面的所有其他内容都丢失了暗示那里存在致命错误......它可能像@987654332 这样简单@ 返回false - 所以$result 然后是false 所以$result-&gt;fetch_assoc() 正试图调用一个布尔值和可怕的死亡。您需要打开display_errors 或查看日志以了解究竟出了什么问题。

标签: php html mysql twitter-bootstrap e-commerce


【解决方案1】:

问题似乎是您在 updator 函数中声明了 $result,因此当您稍后尝试调用它时它不可用。

最好的办法可能是从函数中返回 $result 并将其分配给一个变量 - 如下所示:

function updator($item)
{
    // ... some code ...

    $sql = "SELECT * FROM $table WHERE item = '$item'";
    $result = $conn->query($sql);

    // ... some more code ...

    return $result;
}

<-- HTML CODE HERE -->

<?php
$item = !empty($_GET['item']) ? $_GET['item'] : false;

// yes I know it's a bit hacky to assign the variable
// within the 'if' condition...
if($item && $result = updator($item)) {
    while($data=$result->fetch_assoc()){
        echo "<h1>{$data['item']}</h1><br>";
        echo "<h1>{$data['item_desc']}</h1><br>";
        echo "<h1>{$data['price125']}</h1><br>";
        echo "<h1>{$data['price250']}</h1><br>";
    } 
}
?>

【讨论】:

  • 嗯,给我一分钟 - 我会把你的代码放到我的开发箱上,看看它说了什么......
  • @YaddyVirus - 我在获取$_GET['item'] 时出错了 - 它应该现在可以工作了。
  • 所以我启用了错误报告并恢复到我原来的脚本。这就是我得到的。注意:未定义的变量:导致第 110 行的 /home/siteincharge/public_html/nutsnboltz.com/productpage.php 致命错误:在 /home/siteincharge/public_html/nutsnboltz 中的非对象上调用成员函数 fetch_assoc()。 com/productpage.php 在第 110 行我猜你是对的?
  • 就我的理解而言,您使用 get 拉入参数,然后在 if 条件中运行函数,将结果存储在 $result 中。我对么?另外,您介意说明为什么还要将$item 放在 if 语句中吗?
  • 这只是一个健全性检查 - 如果 $itemfalse 则调用该函数是没有意义的。您现在可能想看看如何清理用户输入并防止 SQL 注入:stackoverflow.com/questions/60174/… ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-04
  • 2017-05-28
  • 2015-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多