2016-04-09 8 views
0

Aynı arama alanına ad, telefon numarası, müşteri, e-posta vb. Kullanarak arama yapmak istiyorum. Ama bazı sütunlar INT ve bazıları VARCHAR ve bir sözdizimi hatası alıyorum ve neden emin değilim. Sorunu çözmek için CAST kullanmayı denedim, ancak yine de hata alıyorum.Karışık datatypes ile LIKE sql operatörünü kullanarak php değişkenini karşılaştırma

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

Hata

sözdizimi hatası veya erişim ihlali: 1064 Eğer SQL sözdizimi bir hata var;

'1 çizgisinde 'yakın kullanma hakkı sözdizimi için MySQL sunucu sürümü' VARCHAR) LIKE '% George%' VEYA ad LIKE '% George%' VEYA soyad LIKE' % George% karşılık manuel kontrol

TABLO

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

İlk önce "||" yerine VEYA kullanmanız gerektiğini düşünüyorum –

+0

Bunları OR olarak değiştirdim ancak yine de aynı hata mesajını alıyorum. Başka önerileriniz var mı? – David

+0

Emin değilim ama belki alan uzunluğunu sağlamanız gerekiyor. CAST (VARCHAR (12)) –

cevap

0

MySQL docs göre sadece döküm olabilir:

SAYISAL [(N)]

CHAR [(N)]

TARİH

DATETIME

DECIMAL [(M [, D])]

İMZA [INTEGER]

ZAMAN

Yani gerçekten senin int şey haline, bu konuda CHAR veya CHAR(20) kullanmak döküm varsa

UNSIGNED [TAMSAYILI].

+0

Teşekkür ederiz! Bu hile yaptı. CAST dökümanlarına elden önce biraz daha okumalıydım. – David

-1

başka bir değişken oluşturmak ve dökümü eklemek gerekir, ve aynı zaman $ aramada int türünde bu sütunlara aramak istiyorsunuz bu varchar sütunları denetler.

+0

Ancak veritabanındaki alan hala yanlış (farklı) tiptedir, bu yüzden dönüştürmesi gerekir/Her neyse –