MySQL fıkra, php dizi

6 Cevap php

Ben bu sorular ve daha önce cevap olduğunu biliyorum, ama ben yanlış gidiyorum beni hayat için ben bulamıyorum. Benim kod aşağıda.

$backa = array("1", "7", "8", "9", "12");
$backaa = implode(",", $backa);
/* code to create connection object $wkHook */
$getOpt=$wkHook->prepare("select movementId, movementName from Movement where movementId IN ($backaa) order by movementName asc");
$getOpt->execute();
$getOpt->store_result($id, $name);

Ben bu çalıştırmak her zaman ben $ backaa değişkeni kullanmak ne bağlı iki hatalardan biri olsun. Daha sık değil ben $ getOpt uygun bir Mysql sorgusu olmadığını belirten bir nesne olmayan hata, bir çağrı olsun. Ben $ backaa değişkeni vb, parentezleme, alıntı her moda denedim ama bu sadece benim için çalışmıyor. Ben bariz ne bir şey eksik?

6 Cevap

Sadece eksik olmayan bir )? Bu olmalı

$getOpt=$wkHook->prepare("select movementId, movementName from Movement where movementId IN ($backaa0) order by movementName asc");

Zaten işaret gibi, sorgu geçersiz SQL olduğunu. Read the error messages: onlar size yardım için oradayız.

Düz SQL içine parametre değerleri enjekte eğer ne olursa olsun, size hazırlanan tabloların bütün mesele özledim.

Birden fazla parametrelere genişletmek destek parametreleri ile çalıştık DB kütüphaneleri hiçbiri. Genel olarak, sizin dizideki n farklı parametreleri oluşturmak ve sizinle sonuna kadar böylece tüm bunları tek tek bağlamak gerekiyor:

$getOpt=$wkHook->prepare("select movementId, movementName
    from Movement
    where movementId IN (?, ?, ?, ?)
    order by movementName asc");

Bu array_keys() ve implode() bir kombinasyonu ile otomatikleştirmek için kolay.

Sorgunuzda var $ backaa0 ve kodunuzda $ backaa olduğunu. Ve bir ")" eksik.

$backaa = implode(",", $backa);
/* code to create connection object $wkHook */
$getOpt=$wkHook->prepare("select movementId, movementName from Movement where movementId IN ($backaa0 order by movementName asc");

Sorun implode olduğunu, deneyin:

$backaa = "'". implode("', '", $backa) ."'";

Eğer $ backaa bağlarsanız, aslında diyorsun:

...where movementId IN ('"1", "7", "8", "9", "12"') order by...

Ne oluyor, görüyor musun? Bu 1 parametresi, sayılar, virgül ve tırnak oluşan yani bir dizge olarak tedavi ediliyor. Yani ben bu işe nasıl görmüyorum.

Bir dizi olarak bağlayıcı gelince, o daha mantıklı, ama o sizin için yürümüyor gibi o kadar bilmiyorum geliyor.

Ben bu işe düşünüyorum:

...where movementId IN (".$backaa.") order by...

Ama o zaman gerçekten bir şey bağlayıcı değil, bu yüzden de sizin real_escape_string () patlak olabilir. Bu size daha önce bunu nasıl olmuş olabilir şüpheli.

Birisi arıyor İşte benim uygulamasıdır ..

$ Liste = $ _POST ['list'];

/ / Liste 3,2,4,5 olduğunu; commma ayrılmış değerler

$ Data = array ($ liste);

$ Data = implode (",", $ veri);

$ Sql ​​= "phone_number pinvalidation NEREDE phone_number ($ veri) İÇİNDE GELEN SELECT;";

$ Res = mysql_query ($ sql);