Frage

Ich habe den folgenden Code:

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

Welche sollte funktionieren. Allerdings erhalte ich den Fehler, dass:

Sie haben einen Fehler in der SQL-Syntax; Sie in die Bedienungsanleitung zu Ihrer MySQL-Server-Version für die richtige Syntax entspricht in der Nähe zu verwenden ‚? WHERE obere (ARTICLE_NAME) LIKE '%?%'‘In Zeile 1

Wenn ich put

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

Die Abfrage funktioniert gut. $ Tabelle oben definiert ist, und Abfrage von GET empfangen, und beide sind korrekt gültige Werte. Warum ist das Versagen?

edit: Wechsel zu:

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

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

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

Ergebnisse in dem Fehler:

Achtung: mysqli_stmt :: bind_param () [mysqli-stmt.bind-param]: Anzahl der Variablen nicht mit Anzahl von Parametern in vorbereiteter Anweisung in C: \ Programmen \ EasyPHP 3.0 \ www \ prog \ get_records. php on line 38

Befehle nicht synchron; Sie können diesen Befehl jetzt nicht ausgeführt

Dabei gilt als

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

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

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

Ergebnisse in

Fatal error: Can not Parameter übergeben 2 durch Verweis in C: \ Programme \ EasyPHP 3.0 \ www \ prog \ get_records.php on line 38

und schließlich

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

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

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

gibt nur:

Befehle nicht synchron; Sie können diesen Befehl jetzt nicht ausgeführt

Ist es unmöglich, eine Paramter für eine LIKE statament zu benutzen?

War es hilfreich?

Lösung

Für LIKE Klausel, verwenden Sie diese:

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

Wie für die Tabellennamen, es ist eine extrem schlechte Praxis Tabellennamen als Parameter zu haben.

Wenn aus irgendeinem Grund müssen Sie noch, es zu tun, müssen Sie es in die Abfrage Text einzubetten, bevor die Abfrage vorbereiten:

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

Andere Tipps

Haben Sie ausgegeben

mysqli_free_result($result);

nach der letzten Abfrage? Das ist der Befehl aus Synchronisierungsfehler.

Dies sollte jedoch funktionieren

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

Sie fragen sich, was in dem $ query variabel ist. Versuchen Sie, diese stattdessen

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

Versuchen Sie Folgendes statt:

$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 Sie keine Platzhalter für Bezeichner mit mysqli und bereiten Anweisungen verwenden können. So müßten Sie manuell die Tabellennamen in die Abfrage einfügen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top