这是显示我的问题的网站
http://teetimeqc.com/paypage.php
我想显示一整行,该行与列"cust_no"上的搜索查询项完全匹配
其他列为"prog_id"、"balance"、"cust5_id">
因此,用户搜索"140594",如果它与该行的"cust_no"完全匹配,则整个1行都会显示出来。
所以他们看到的结果是这样的:
ID#进度ID#客户编号#余额#
更新代码
到目前为止,感谢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);
更新问题更新后,错误发生了变化。现在您的问题是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/>
部分可能会使某些浏览器无法正确呈现列表。。。实际上,当只显示一个结果时,显示有序列表是没有意义的。。。
$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."%'"
您将Integer作为String进行比较,如果它是精确值,为什么要使用%?
"SELECT * FROM FROM ".$db_tb_name." WHERE ".$db_tb_atr_name." = ".$query