2016-04-24 8 views
0

Ich habe verschiedene Dinge ausprobiert, um diesen kurzen Code zu erhalten. Er verbindet sich mit der Datenbank über PDO und wählt dann alle Zeilen aus, die einer Post-Variablen entsprechen. Wenn mehr als 0 Zeilen vorhanden sind, aktualisieren Sie die Lizenzschlüsselzeilen so, dass sie "verwendet" werden und echo "wahr" sind.PDO rowCount und fetchColumn geben beide kein korrektes Ergebnis zurück

Ich habe versucht, rowcount und fetchcolumn und count (*) für sql, und keiner der Unterschiede angezeigt. In MySQL selbst habe ich einen gültigen Lizenzschlüssel verwendet und er gibt tatsächlich eine Zeile zurück.

<?php 
if(isset($_POST['licensekey'])) { 

try { 
    $db = new PDO("mysql:host=localhost;dbname=validation", "test", "test"); 
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} catch(PDOException $e) { 
    die($e->getMessage()); 
} 

$search = ("SELECT * FROM validated WHERE activationkey=:lk AND used='0'"); 
$result = $db->prepare($search); 
$result->bindParam(":lk", $_POST['licensekey']); 
$result->execute(); 

if($result->rowCount() > 0) { 
    $used = ("UPDATE validated SET used='1' WHERE validated.activationkey=:lk"); 
    $result2 = $db->prepare($used); 
    $result2->bindParam(":lk", $_POST['licensekey']); 
    $result2->execute(); 

    echo "true"; 
} else { 
    echo "false"; 
} 

$db = null; 
} else { 
    exit(); 
} 
?> 

Jedes Mal wird es false egal was zurückgeben.

Was scheint hier das Problem zu sein?

+0

Sind Sie sicher, dass es mit der gleichen Datenbank verbunden ist, die Sie in Ihrem MySQL-Client getestet haben? Sie haben Ausnahmen aktiviert, so dass ein Problem auftreten würde, bevor das 'echo" false "' ausgeführt wird. Wenn Sie den 'activationkey =: lk AND' aus der Abfrage entfernen und den Aufruf' bindParam() 'auskommentieren, um ihn ohne Parameter auszuführen, ist' rowCount() 'immernoch Null, wenn einige Zeilen in der Tabelle existieren? –

+0

'rowCount()' funktioniert mit einigen Versionen von MySQL für SELECT-Abfragen, ich habe gegen eine alte 5.1 und 5.6 getestet. –

+0

Ich habe das 'bindparam' auskommentiert und die Abfrage so geändert, dass es nur' SELECT * FROM validiert' ist - Es gibt jetzt true zurück, aber da bin ich immer noch verwirrt. Der Lizenzschlüssel wird gepostet, weil ich mit 'isset' überprüfe, also sollte es da drin sein und es ist gut zu gehen. Der Lizenzschlüssel ist genau derselbe, den ich kopiert habe, aber er wird false zurückgeben, wenn er gepostet wird. Ich bin mir nicht sicher, was hier vor sich geht. – Joel

Antwort

-1

Eigentlich können Sie nicht sehen, wie viele Datensätze in DB mit rowCount-Funktion ausgewählt sind. Wie ich in der PHP-Dokumentation gelesen habe, geben viele ausgewählte Abfragen nicht zurück, wie viele Zeilen von der Abfrage mit der rowCount-Methode betroffen sind. Überprüfen Sie es für weitere Informationen: http://php.net/manual/en/pdostatement.rowcount.php

Wie Doc sagt, können Sie FetchColumn-Methode verwenden.

Verwandte Themen