2

这是显示我的问题的网站

http://teetimeqc.com/paypage.php

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

其他列是“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);
4

2 回答 2

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);

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

最好,从您的评论中可以看出,现在使用已弃用的 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>";

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

于 2013-03-18T20:51:34.150 回答
1
$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

于 2013-03-18T20:52:30.537 回答