【问题标题】:My PHP code needs to display all rows; how can do this我的 PHP 代码需要显示所有行;怎么能做到这一点
【发布时间】:2013-03-18 20:41:56
【问题描述】:

这是显示我的问题的网站

http://teetimeqc.com/paypage.php

我想在“cust_no”列上显示 1 个与搜索查询词完全匹配的整行

其他列是'prog_id'、'balance'、'cust5_id'

所以用户搜索“140594”,如果它与该行的“cust_no”完全匹配,则显示整个 1行。

所以他们看到这样的结果:

ID# Prog ID# Cust No# Balance #

更新代码!

到目前为止,感谢 jtherman 的帮助

<code>

 <?php

 $db_host="***";
$db_username="****";
$db_password="****";
$db_name="***";
$db_tb_name="cust";
$db_tb_atr_name="cust_no";


  $db_prog="prog_id";
$db_bal="balance";
mysql_connect("****","*******","*****");
mysql_select_db("db461563732");

$query=mysql_real_escape_string($_GET['query']);


$query_for_result=mysql_query("SELECT * FROM $db_tb_name WHERE 

 $db_tb_atr_name  = '".$query."'");
echo "<h2>Search Results</h2>";
while($data_fetch=mysql_fetch_array($query_for_result))



   echo ($data_fetch[$db_tb_atr_name]);

   echo ($data_fetch[$db_prog]);




mysql_close();

?>

这是桌子的样子; Cust5_ID 并不重要,它只是我用作主键的自动增量值.....我应该将主键更改为“cust_no”吗?:

TABLE `cust`
(
    `cust5_id` Integer auto_increment primary key, 
    `prog_id` Integer not null,
    `cust_no` Integer null,
    `balance` Decimal(12, 2) null
) DEFAULT CHARACTER SET utf8 ENGINE=InnoDB;

INSERT INTO `cust`
(`cust5_id`,`prog_id`,`cust_no`,`balance`)
VALUES
(1,217770,145094,-178.01),
(2,219885,145113,-390.86),
(3,219888,145164,-206.55),
(4,226227,145279,0),
(5,227700,145340,0),
(6,219911,145344,0),
(7,227795,145410,-44.1);

【问题讨论】:

  • 又是什么问题?如果用户搜索 145,您不想返回任何内容,因为结果不止 1 个?
  • 是的,我想要与客户编号完全匹配或没有结果。我还希望显示具有相邻列的行。
  • 如果您将like '%".$query."%'"); 更改为`= '".$query."'"); 会产生完全匹配...
  • 作为旁注。考虑从 mysql_ 函数切换到 PDO
  • bla bla mysql_ 函数... bla bla deprecated.. bla bla injection

标签: php mysql database search


【解决方案1】:

更新 由于问题已更新,错误已更改。现在您的问题是 while() 循环的语法有错误。使用大括号开始和结束 while 循环:

while($data_fetch=mysql_fetch_array($query_for_result)) { // <- here
  echo $data_fetch[$db_tb_atr_name];
  echo ", ";
  echo $data_fetch[$db_prog];
} // <- and here

但是 - 如果您的数据库对于每个 cust_no 始终只包含一行,那么您可能会考虑添加一个唯一索引或使其成为主键,具体取决于应该如何生成数字。那么你也不需要while() 循环,因为你的查询总是只会返回一行:

$data_fetch = mysql_fetch_assoc($query_for_result); // <-load the single row into $data_fetch
echo $data_fetch[$db_tb_atr_name];
echo ", ";
echo $data_fetch[$db_prog];

还要 100% 确保您拥有正确的数据库凭据。我建议您使用

mysql_connect($db_host, $db_username, $db_password);

现在看来,您在代码中编写了两次凭据(标记为 *)?

最好,从您的 cmets 中可以看出,现在使用已弃用的 mysql_* 函数是一种不好的做法,您应该使用 PDO 函数真正转换您的代码,请参阅http://www.php.net/manual/en/pdo.connections.php 但是这不是这个问题的范围。

以前的答案

换行

 $db_tb_atr_name  like '%".$query."%'");

 $db_tb_atr_name  = '".$query."'");

这将完全匹配......

那就换行

echo substr($data_fetch[$db_tb_atr_name], 0,10);

echo $data_fetch['cust5_id'].",".$data_fetch['prog_id'].",".$data_fetch['cust_no'].",".$data_fetch['balance'];

查看您想要的结果格式。

也改变

echo "</li><hr/>";

echo "</li>";

&lt;hr/&gt; 部分可能会使某些浏览器无法正确呈现列表...实际上仅显示一个结果时显示有序列表没有意义...

【讨论】:

  • 我这样做了....但现在它没有显示任何结果,也没有错误消息....
  • 你搜索的客户没有在 db 中存在?
  • 是的,我查过了。我将输入类型更改为“整数”,它返回一个结果,但只显示客户主键,但不显示该行的其余部分......奇怪。
  • echo substr($data_fetch[$db_tb_atr_name], 0,10); 行中使用 substr 作为客户编号有什么意义?为什么要缩短短值?
  • @WillWilkinsIII 抱歉,您为什么将我的答案删除为建议的答案???即使这里发布的答案都没有 100% 解决您的问题,我必须说我的努力更加精细!?
【解决方案2】:
$query_for_result=mysql_query("SELECT * FROM $db_tb_name WHERE 

$db_tb_atr_name like '%".$query."%'");

我想是的

"SELECT * FROM FROM ".$db_tb_name." WHERE ".$db_tb_atr_name."like '%".$query."%'"

您将整数与字符串进行比较,如果它是精确值,为什么要使用 %?

"SELECT * FROM FROM ".$db_tb_name." WHERE ".$db_tb_atr_name." = ".$query

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    • 2022-11-09
    • 1970-01-01
    • 2016-02-07
    相关资源
    最近更新 更多