2

ここに私の問題を示すウェブサイトがあります

http://teetimeqc.com/paypage.php

列「cust_no」の検索クエリ用語と完全に一致する 1 行全体を表示したい

その他の列は「prog_id」、「balance」、「cust5_id」です。

ユーザーが「140594」を検索すると、その行の「cust_no」と完全に一致する IF に沿って1行全体が表示されます。

したがって、次のような結果が表示されます。

ID# プログラムID# 顧客番号# 残高#

更新されたコード!

これまで助けてくれてありがとう

<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
$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 に答える
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 ごとに常に 1 つの行しか含まれていない場合は、数値の生成方法に応じて、一意のインデックスを追加するか、それを主キーにすることを検討してください。while()次に、クエリは常に1行しか返さないため、ループは必要ありません。

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

コードに認証情報を 2 回記述しているように見えますが ( *とマークされています)?

できれば、コメントからわかるように、非推奨の 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/>一部のブラウザでは、リストが正しくレンダリングされない可能性があります...実際に順序付きリストを表示しても、結果が 1 つしか表示されない場合は意味がありません...

于 2013-03-18T20:51:34.150 に答える