【问题标题】:Displaying MySQL Data Using PHP使用 PHP 显示 MySQL 数据
【发布时间】:2013-12-18 11:15:07
【问题描述】:

我最近开始为了好玩而编程,如果解决这个问题的方法很简单,我很抱歉。

我有一个 mysql 表,其中存储了客户销售票。我要做的是获取它,以便您可以细化下拉列表中显示的票证。我可以从 mysql 表中填充下拉列表,但是当我单击提交以过滤掉并按所选客户名称显示时。我收到以下错误:-

警告:mysqli_fetch_array() 期望参数 1 为 mysqli_result,布尔值在 C:\xampp\htdocs\result.php 第 16 行给出

以下是我使用的两个 PHP 页面。第一页是填充下拉菜单的地方。

<?php
//db connection 
mysql_connect("********","********","********");
mysql_select_db("salesys");

//query
$sql=mysql_query("SELECT DISTINCT CustomerName FROM ticket ORDER BY CustomerName ASC");
if(mysql_num_rows($sql)){

$select= '<select name="select">';  
while($rs=mysql_fetch_array($sql)){
      $select.='<option value="'.$rs['CustomerName'].'">'.$rs['CustomerName'].'</option>';
  }
}

$select.='</select>';

?>  

<form name="input" action="result.php" method="POST">
<?php echo $select; ?>
<input type="submit" value="Submit">
</form>

下面是第二页。

<?php
$customerName = $_POST['select'];
echo "Showing Results For: ", $customerName;
echo "<BR>";
echo "<BR>";

$con=mysqli_connect("localhost","root","********","********");
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

$result = mysqli_query($con,"SELECT * FROM ticket WHERE CustomerName = $customerName");

while($row = mysqli_fetch_array($result))
  {
  echo $row['TicketID'] . " | " . $row['CustomerName'] . " | " . $row['BriefDesc'];
  echo "<br>";
    echo "<br>";
  }

mysqli_close($con);
?>

任何帮助将不胜感激。

【问题讨论】:

  • 使用prepare语句mysqli支持
  • 您正在混合使用 mysql_mysqli_ 函数。如果可能,请坚持mysqli

标签: php mysql mysqli


【解决方案1】:

如果您最近开始编程,您必须先学习如何编程。在开始使用任何特定语言或 API 之前。

程序员的一项基本能力是使用谷歌的技能。这并不难:只需将您拥有的错误消息(不仅是这个错误消息,还有您将遇到的每个错误消息)复制并粘贴到谷歌搜索栏中。您会发现数百人已经面临同样的问题并以某种方式解决了这些问题。你很可能会找到答案。它非常简单但很有帮助,但又非常必要

顺便说一句,唯一正确的答案是在 cmets 中:使用准备好的语句

【讨论】:

    【解决方案2】:

    您必须在while($row = mysqli_fetch_array($result)) 之前检查查询是否正确,以帮助您调试代码。

    您可以检查$result 是否有效。请参阅下面的简单代码(仅用于调试目的,因为在生产中显示 mysql 错误是不安全的)

    在你的情况下,错误可能比$customerName 是一个字符串,并且必须用引号引起来

    $customerName = '"'.mysqli_escape_string($con, $customerName).'"';
    $result = mysqli_query($con, "SELECT * FROM ticket WHERE CustomerName = $customerName");
    if (!$result)
    {
      echo mysqli_error(); 
    }
    

    编辑: 在生产中,除非验证了某些必需条件,否则不应显示错误。如果您的网站有登录系统,则只有在您(而不是其他任何人)登录时才能显示错误。

    【讨论】:

    • 虽然不是很优雅,但这是对问题的正确解释。
    • 在生产中,应该不会显示错误。但是您可以检查一些条件(常量、cookie、任何东西或混合)以仅向授权人员显示错误
    • 为什么不让这段代码已经是生产安全的?不只是再讲一次没人听的讲座,而只是让这段代码在调试和生产中安全工作?
    猜你喜欢
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多