2016-04-06 6 views
-1

Hier ausführen kann, ist mein Codenicht zweite MYSQLI Abfrage in derselben PHP-Datei

$stmt = $mysqli->prepare("SELECT * FROM `accountsToDo` WHERE `OKrname` = ?"); 
    $stmt->bind_param("s", $OKCUsername); 

    /* execute prepared statement */ 
    $stmt->execute(); 

if ($stmt->affected_rows > 0){ 
    echo "Exists"; 
} else { 
    $stmt = $mysqli->prepare("INSERT INTO `accountsToDo`(`percentageOfMessages`, `RemoveDeletedAccounts`, `RemoveNoReply`, `RemoveNoResponse`, `minMatchPercent`, `minDistance`, `maxDistance`, `blacklistUsernames`, `userEmail`, `OKrname`, `OKword`) VALUES (?,?,?,?,?,?,?,?,?,?,?)"); 
    $stmt->bind_param("iiiiiiissss", $percentageOfMessages, $RemoveDeletedAccounts, $RemoveNoReply, $RemoveNoResponse, $minMatchPercent, $minDistance, $maxDistance, $blacklistUsernames, $userEmail, $OKrname, $OKword); 

    $stmt->execute(); 
} 


/* close statement and connection */ 
$stmt->close(); 

/* close connection */ 
$mysqli->close(); 

jetzt aber den Fehler Ich erhalte,

Anruf auf eine Elementfunktion bind_param() auf boolean in Zeile 147 147.

Line ist

$stmt->bind_param("iiiiiiissss", $percentageOfMessages, $RemoveDeletedAccounts, $RemoveNoReply, $RemoveNoResponse, $minMatchPercent, $minDistance, $maxDistance, $blacklistUsernames, $userEmail, $OKrname, $OKword);

+1

hatte Klingt Anweisung fehlgeschlagen vorzubereiten. Testen Sie auf Fehler? Möglicherweise möchten Sie Ausnahmen aktivieren, um sie zu vermeiden. – tadman

+2

'affected_rows()' ist nicht für SELECT. http://php.net/manual/en/mysqli.affected.s.php * "Gibt die Anzahl der Zeilen zurück, die von der letzten INSERT-, UPDATE-, REPLACE- oder DELETE-Abfrage betroffen sind." * - Was Sie wollen, ist 'num_rows() '. http://php.net/manual/en/mysqli-result.num-rows.php –

+1

Keine Fehlerprüfung überhaupt nicht. –

Antwort

0

Sie ein Leerzeichen zwischen Tabellenname fehlt und eine Liste der Felder in Ihrer $mysqli->prepare

Versuchen Sie folgendes:

$stmt = $mysqli->prepare("INSERT INTO `accountsToDo` 
         (`percentageOfMessages`,`RemoveDeletedAccounts`, 
         `RemoveNoReply`, `RemoveNoResponse`, 
         `minMatchPercent`, `minDistance`, 
         `maxDistance`, `blacklistUsernames`, 
         `userEmail`, `OKrname`, `OKword`) 
         VALUES (?,?,?,?,?,?,?,?,?,?,?)"); 

Nach manual mysqli- $> prepare FALSE zurück, wenn Anweisung einen Fehler verursacht

UPDATE

Sieht aus wie Ihr $ mysqli-> prepare 11 Variablen erwartet und Sie versuchen, 12

+0

Das sollte nicht wichtig sein. Das gilt nur, wenn es eine Funktion ist. –

+0

Aus irgendeinem Grund fühlt es sich immer noch nicht nach Arbeit an. Dies ist der Code, den ich bisher habe http://hastebin.com/ofileleciz.php Und der Fehler, den ich bekomme, ist "Call to a member function bind_param() on boolean" – PhpisHardForMe

1

binden Wenn alles, was Sie in eine To-do-Tabelle einfügen tun, wenn die Master-Tabelle Sie keine passende Zeile hat, brauche keine zwei Aussagen.

INSERT INTO `accountsToDo` 
     (`percentageOfMessages`, `RemoveDeletedAccounts`, 
      `RemoveNoReply`, `RemoveNoResponse`, `minMatchPercent`, 
      `minDistance`, `maxDistance`, `blacklistUsernames`, 
      `userEmail`, `OKrname`, `OKword`) 
VALUES (?,?,?,?,?,?,?,?,?,?,?) 
WHERE NOT EXISTS (SELECT 1 FROM `accountsToDo` WHERE `OKrname` = ?); 

Binden Sie Ihre Parameter und Sie haben einen Aufruf an die db gespeichert. Dies hat den Vorteil, dass "SELECT 1" als ein Schnittoperator fungiert, so dass es nur ausgewertet wird, bis es den ersten WAHR findet.

+0

@RiggsFolly Danke für die Formatierung. Ich habe es nur für PHP programmiert. Sieht gut aus :) –

+0

Aus irgendeinem Grund fühlt es sich immer noch nicht nach Arbeit an. Dies ist der Code, den ich bis jetzt habe [http://hastebin.com/ofileleciz.php](http://hastebin.com/ofileleciz.php) Und der Fehler, den ich bekomme, ist "Call to a member function bind_param () auf Boolean " – PhpisHardForMe

0

Das Problem war, dass ich nicht $stmt->store_result(); über dem ersten $stmt->execute();

Verwandte Themen