Küçük PHP ve MySQL sorun

5 Cevap php

Ben kimlik bir dizi var: s ve ID: s bu biçimdedir:

  Bmw_330ci_89492822

Yani bir dize var!

Now, I have this code to find whatever is in that array, in MySQL: ($solr_id_arr is the array I mentioned above, it contains string ID:s) ex: $solr_id_arr[0] outputs Bmw_330ci_89492822

$solr_id_arr_imploded = implode(", ", $solr_id_arr);
$query = "SELECT * FROM my_table WHERE ad_id IN ('$solr_id_arr_imploded')";
$qry_result = mysql_query($query) or die(mysql_error());

Sorun bu alışkanlık işidir (bence) MySQL eşleşme bulmak için sırayla Imploded elemanların her etrafında tırnak olması gerektiğini çünkü. Ben eşleşen am MySQL alan tipi varchar olduğunu.

İşte $query yankılandı olduğunu:

 SELECT * FROM my_table WHERE ad_id IN ('Bmw_m3_cool_565440282, Bmw_m5_839493889')

Bunun için başka bir çözüm var mı, ben gereken bu dizinin içinde olan MySQL eşleşmeleri bulmak için!

Teşekkürler

5 Cevap

Tırnak içinde tüm şey çevreleyen etmeyin. Bu ad_id 'Bmw_m3_cool_565440282, test' nerede arıyor

Kullanım

SELECT * FROM my_table WHERE ad_id IN ('Bmw_m3_cool_565440282', 'test')

Hızlı bir düzeltme değiştirmek olacaktır:

//this
$solr_id_arr_imploded = implode(", ", $solr_id_arr);

//to this
$solr_id_arr_imploded = implode("', '", $solr_id_arr);

', ' olarak basit anahtar implode():

implode("', '", $solr_id_arr);

Bu arada SQL dizesinde kodlanmış tırnak ile onlara ayrı öğeleri biçimlendirmek olacaktır.

This one seems complicated but it's more safer and fastest one

function escaped($str)
{
   return mysql_escape_string($str);
}
$arrayOfIds = array_map("escaped", $solr_id_arr);

$solr_id_arr_imploded = implode(", ", $arrayOfIds);

$query = "SELECT * FROM my_table WHERE ad_id IN ('$solr_id_arr_imploded')";
$qry_result = mysql_query($query) or die(mysql_error());

Önceki cevaplar cezası çalışacaktır.

Sadece dizeleri kendileri tırnak içermediğinden emin olun. Onlar yaparsanız çöktüğünü yapmadan önce,) (her dize kaçış.

Benim kod olsaydı bu gibi yazmak isterim:

$solr_id_arr_imploded = "'" . implode("', '", $solr_id_arr) . "'";
$query = "SELECT * FROM my_table WHERE ad_id IN ($solr_id_arr_imploded)";
$qry_result = mysql_query($query) or die(mysql_error());

... Tek bir yerde tüm alıntı iş tutar çünkü. Ayrıca dizinin bu kod bloğunu girmeden önce boş olmadığından emin olmak isteyebilirsiniz. Aksi SEÇ muhtemelen ne istediğini, hangi değil tüm boş ad_id ait maç olacak. Biz de dizinin elemanları (aklı-kontrol edilmemiş veya kullanıcı tarafından sağlanan dizeleri) herhangi bir alıntı karakterler dahil olmadığını varsayıyoruz.