2015-04-17 21 views
0

我在成員表[A-,A +,B +,B-,AB +,AB-,O +,O-中有血型數據] 我有一個血型數據搜索功能,可以讓我選擇以上血型,並搜索具有選定血型的會員。 但我的查詢並沒有把我帶到血型以「+」結尾的成員。對於血型爲「 - 」的成員,同樣的查詢工作正常。如何在mysql中使用「+」來管理數據,其中子句

然後,我將查詢結果傳遞給提取最終查詢結果的JavaScript網址。所以我覺得javascript變量在得到+時會結束。那麼如何管理呢?

這是我的查詢:

$bldgroup  = mysql_real_escape_string($_POST["bldgroup"]); 
$sqlsearch = mysql_query("SELECT * from member 
          WHERE blood_group='$bldgroup' 
          ORDER BY memid ASC"); 

<script> 

var url = "../include/query.php?flag=search&&query="+sqlsearch; 

</script> 
<div><label>Blood Group</label></div> 
      <div> 
      <select id="bldgroup" name="bldgroup" > 
       <option value="">Select</option> 
       <option value="A+">A+</option> 
       <option value="A-">A-</option> 
       <option value="B+">B+</option> 
       <option value="B-">B-</option> 
       <option value="AB+">AB+</option> 
       <option value="AB-">AB-</option> 
       <option value="O+">O+</option> 
       <option value="O-">O-</option> 
      </select> 
     </div> 
     </div> 


//This the content inside ./include/query.php file 
if(isset($_REQUEST["flag"])) 
{ 
    $list = $_REQUEST["flag"]; 
    if($list == "search") 
    { 
     $query = $_REQUEST["query"]; 
     $sql = $query; 
     $sql.= mysql_query" ORDER BY t1.MemberID DESC";  
    } 
} 
+2

在打開PHP標記 (例如'<?php error_reporting(E_ALL);)後立即在文件頂部添加錯誤報告。 ini_set('display_errors',1);'然後你的代碼的其餘部分,看看它是否產生任何東西。 還要把'或者死(mysql_error())'添加到'mysql_query()'中。 –

+9

請[停止使用'mysql_ *'函數](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)。他們不再被維護,並[正式棄用](https://wiki.php.net/rfc/mysql_deprecation)。瞭解[準備的陳述](http://en.wikipedia.org/wiki/Prepared_statement),並使用[PDO](http://jayblanchard.net/demystifying_php_pdo.html)。 –

+1

'+'號會導致字符串結束..您應該使用**'prepared statement' **代替。您可以在這裏找到幫助[http://php.net/manual/en/mysqli.quickstart .prepared-statements.php) –

回答

1

的代碼對我的作品。我創建了一個表成員與blood_group A + A記錄和一個與blood_group A-。選擇A +併爲我發送表格結果會得到正確的記錄。

當然,我不知道你的表定義,所以你的MySQL查詢可能有問題。

使用

$sql = "SELECT * from member where  blood_group='$bldgroup' order by memid asc"; 
$search_result = mysql_query($sql) or die ($sql."<BR>".mysql_error()); 

還要注意你已經收到的意見嘗試。您的代碼使用通常不安全的棄用函數,您至少應該使用mysqli函數。

我的PHP代碼:

<?php 
mysql_connect("localhost", "root", "root"); 
mysql_select_db("test"); 

$bldgroup  = mysql_real_escape_string($_POST["bldgroup"]); 
$sqlsearch = mysql_query("SELECT * from member where  blood_group='$bldgroup' order by memid asc"); 

while ($row = mysql_fetch_row($sqlsearch)) { 
    var_dump($row); 
} 

?> 
<form method="POST"> 
<div><label>Blood Group</label></div> 
      <div> 
      <select id="bldgroup" name="bldgroup" > 
       <option value="">Select</option> 
       <option value="A+">A+</option> 
       <option value="A-">A-</option> 
       <option value="B+">B+</option> 
       <option value="B-">B-</option> 
       <option value="AB+">AB+</option> 
       <option value="AB-">AB-</option> 
       <option value="O+">O+</option> 
       <option value="O-">O-</option> 
      </select> 
     </div> 
     </div> 
     <input type="submit"> 
</form>  

我的表定義:

CREATE TABLE `member` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `blood_group` varchar(20) NOT NULL, 
    `memid` int(11) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; 

INSERT INTO `member` (`id`, `blood_group`, `memid`) VALUES 
(1, 'A+', 123), 
(2, 'A-', 231); 
+1

在這裏我看不到什麼不同,比評論中已經說過的要多。什麼對你有用,並不意味着它會爲他們工作。 –

+0

那麼從代碼提供的問題似乎並不存在,所以它可能在表定義..所以希望他可以使用或die()結構來了解什麼是錯的。 –

+1

猜測不應該是一個答案,它應該是一個評論。 –

0

試圖逃避使用\搜索詞的最後一個字符,以確保加號作爲字符串:

$bldgroup= substr($bldgroup, 0, -1).'\'.substr($bldgroup, -1); 

還檢查你的表是否有A +在你的表中呢?!如果沒有,在將數據插入數據庫的同時,也會通過\ +轉義+。

+0

其實我的查詢返回正確的值。但是,然後我將查詢結果發送到一個JavaScript變量,它將引用其他URL。這裏出錯了 – Nathan

+0

var url =「../include/query.php?flag=search&&query="+sqlsearch; – Nathan

+0

我修改了上面的代碼。請通過它並讓我知道你是否有任何解決方案 – Nathan

相關問題