SQL LIKE sorgusu başarısız - hazır açıklamada ölümcül hata

4 Cevap php

Ben aşağıdaki kodu vardır:

$countQuery = "SELECT ARTICLE_NO FROM ? WHERE upper(ARTICLE_NAME) LIKE '% ? %'";
if ($numRecords = $con->prepare($countQuery)) {
    $numRecords->bind_param("ss", $table, $brand);
    $numRecords->execute();
    $data = $con->query($countQuery) or die(print_r($con->error));
    $rowcount = mysql_num_rows($data);
    $rows = getRowsByArticleSearch($query, $table, $max);
    $last = ceil($rowcount/$page_rows);
}

Cezası çalışması gerektiğini. Ben hata alırsınız ancak bu:

Eğer SQL sözdizimi bir hata var; yakınındaki kullanılacak doğru sözdizimi için MySQL sunucu sürümü karşılık kılavuzunu kontrol? NEREDE line 1 üst (ARTICLE_NAME) LIKE '%?%''

Ben koyarsanız

SELECT ARTICLE_NO FROM AUCTIONS WHERE upper(ARTICLE_NAME) LIKE '% o %';

Sorgu çalışıyor. $ Tablo yukarıda tanımlandığı ve sorgu GET alınan, hem de doğru geçerli değerlerdir. Neden bu başarısız olduğunu?

edit: changing to:

$countQuery = "SELECT ARTICLE_NO FROM AUCTIONS1 WHERE upper(ARTICLE_NAME) LIKE '% ? %'";

if ($numRecords = $con->prepare($countQuery)) {

    $numRecords->bind_param("s", $query);

hata sonuçları:

Uyarı: mysqli_stmt :: bind_param () [mysqli-stmt.bind-param]: Değişken sayısı C hazırlanmış deyimi parametre sayısı eşleşmiyor: \ Program Files \ EasyPHP hattı üzerinde 3.0 \ www \ prog \ get_records.php 38

Senkronizasyon dışında komutları; Şimdi bu komutu çalıştıramazsınız

nereye kadar

$countQuery = "SELECT ARTICLE_NO FROM AUCTIONS1 WHERE upper(ARTICLE_NAME) LIKE ?";

if ($numRecords = $con->prepare($countQuery)) {

    $numRecords->bind_param("s", "%".$query."%");

Sonuçları

Ölümcül hata: C referans parametre 2 geçmek değil miyim: hattında 38 \ Program Files \ EasyPHP 3.0 \ www \ prog \ get_records.php

ve son olarak

$countQuery = "SELECT ARTICLE_NO FROM AUCTIONS1 WHERE upper(ARTICLE_NAME) LIKE ? ";

if ($numRecords = $con->prepare($countQuery)) {

    $numRecords->bind_param("s", $query);

Sadece verecektir:

Senkronizasyon dışında komutları; Şimdi bu komutu çalıştıramazsınız

Bir GİBİ TABLOLAR için bir Paramtre kullanmak imkansız mı?

4 Cevap

LIKE madde için, bu kullanın:

SELECT ARTICLE_NO FROM AUCTIONS1 WHERE upper(ARTICLE_NAME) LIKE CONCAT('%', ?, '%')

Tablo adı ise, bu parametre olarak tablo adları için son derece kötü bir uygulamadır.

Nedense hala bunu yapmak gerekiyorsa, sorguyu hazırlamadan önce sorgu metnin içine gömmek gerekir:

$countQuery = "SELECT ARTICLE_NO FROM $table_name WHERE upper(ARTICLE_NAME) LIKE CONCAT('%', ? ,'%')";
if ($numRecords = $con->prepare($countQuery)) {
    $numRecords->bind_param("s", $brand);
    $numRecords->execute();
    $data = $con->query($countQuery) or die(print_r($con->error));
    $rowcount = mysql_num_rows($data);
    $rows = getRowsByArticleSearch($query, $table, $max);
    $last = ceil($rowcount/$page_rows);
}

Eğer yayınladı

mysqli_free_result($result);

after the last query? That's the command out of sync error.

Bu çalışması gerekir, ancak

$countQuery = "SELECT ARTICLE_NO FROM AUCTIONS1 WHERE upper(ARTICLE_NAME) LIKE ?";
if ($numRecords = $con->prepare($countQuery)) {
    $numRecords->bind_param("s", "%".$query."%");

Wondering what is in the $query variable. Try doing this instead

$query = '%'.$query.'%';
$numRecords->bind_param("s", $query);

Yerine aşağıdaki deneyin:

$countQuery = "SELECT ARTICLE_NO FROM ? WHERE upper(ARTICLE_NAME) LIKE ?";
if ($numRecords = $con->prepare($countQuery)) {
    $numRecords->bind_param("ss", $table, "%$brand%");
    $numRecords->execute();
    $data = $con->query($countQuery) or die(print_r($con->error));
    $rowcount = mysql_num_rows($data);
    $rows = getRowsByArticleSearch($query, $table, $max);
    $last = ceil($rowcount/$page_rows);
}

Afaik Eğer mysqli'nin ile tanımlayıcılardışında tutucuları kullanabilirsiniz ve tablolarını olamaz. Yani elle sorgu içine tabloismi sokmak olurdu.