2016-04-09 25 views
0

我希望能夠在同一個搜索字段中使用姓名,電話號碼,客戶,電子郵件等進行搜索。但是有些列是INT,有些是VARCHAR,我得到一個語法錯誤,我不知道爲什麼。我嘗試使用CAST來解決問題,但我仍然收到錯誤。使用LIKE sql操作符與混合數據類型比較php變量

PHP

$search = $_POST['search']; 
var_dump($search); 
try { 
    $sql = "SELECT * FROM customers WHERE CAST(custid as VARCHAR) LIKE '%$search%' OR firstname LIKE '%$search%' OR lastname LIKE '%$search%' OR CAST(primaryphone as VARCHAR) LIKE '%'$search%'' OR CAST(secondaryphone as VARCHAR) LIKE '%$search%' OR email LIKE '%$search%'"; 
    $statement = $this->con->prepare($sql); 
    $statement->execute(); 
} catch(PDOException $Exception) { 
    echo "Error: " . $Exception; 
    die(); 
} 

錯誤

語法錯誤或訪問衝突:1064您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以找到在'1'處使用'VARCHAR'LIKE'%George%'或名字LIKE'%George%'或姓氏LIKE'%George%'使用的正確語法

CREATE TABLE customers (
    custid int(6), 
    firstname varchar(20), 
    lastname varchar(20), 
    primaryphone int(20), 
    secondaryphone int(20), 
    email varchar(40), 
); 
+0

我認爲首先你必須用OR來代替「||」 –

+0

我將它們更改爲OR,但仍然收到相同的錯誤消息。還有其他建議嗎? – David

+0

我不確定,但也許你需要提供字段長度。 'CAST(custid as VARCHAR(12))' –

回答

0

按照MySQL docs只能投射到:

BINARY [(N)]

CHAR [(N)]

DATE

DATETIME

DECIMAL [(M [,D])]

簽署[INTEGER]

TIME

UNSIGNED [INTEGER]

所以,如果你真的要投你int到的東西,用CHARCHAR(20)對這一問題。

+0

謝謝!那就是訣竅。我應該事先閱讀一下CAST文檔。 – David

-1

您需要創建另一個變量並將其添加到轉儲,並會在同一時間$搜索中搜索類型爲int的那些列檢查那些VARCHAR列。

+0

但數據庫中的字段仍然有錯誤(不同)的類型,所以他需要轉換/無論如何投下它。 –