Ich habe ein Tabellenfeld in einer MySQL-Datenbank:
userid INT(11)
Also rufe ich es mit dieser Abfrage auf meine Seite:
"SELECT userid FROM DB WHERE name='john'"
Dann mache ich für die Behandlung des Ergebnisses:
$row=$result->fetch_assoc();
$id=$row['userid'];
Wenn ich das tue:
echo gettype($id);
Ich bekomme eine Schnur. Sollte das nicht eine ganze Zahl sein?
$conn->query("your query")
ich die Ganzzahlfelder als Zeichenfolge erhalten, aber als ich verwendet habe, habe$conn->prepare("your query")
ich die Parameter so erhalten, wie sie in der Datenbank warenAntworten:
Wenn Sie mit PHP Daten aus einer MySQL-Datenbank auswählen, wird der Datentyp immer in eine Zeichenfolge konvertiert. Sie können es mit dem folgenden Code wieder in eine Ganzzahl konvertieren:
Oder mit der Funktion
intval()
:quelle
Verwenden Sie den mysqlnd (nativen Treiber) für PHP.
Wenn Sie auf Ubuntu sind:
Wenn Sie auf Centos sind:
Der native Treiber gibt Integer-Typen entsprechend zurück.
Bearbeiten:
Wie @Jeroen hervorgehoben hat, funktioniert diese Methode nur für PDO.
Wie @LarsMoelleken hervorgehoben hat, funktioniert diese Methode mit mysqli, wenn Sie auch die Option MYSQLI_OPT_INT_AND_FLOAT_NATIVE auf true setzen.
Beispiel:
quelle
$link = mysqli_connect('localhost', 'root', ''); mysqli_set_charset($link,'utf8'); $result = mysqli_query($link,'SELECT CAST(\'3.51\' AS DECIMAL(3,2))'); $row = mysqli_fetch_assoc($result); var_dump($row);
zurück:array(1) { ["CAST('3.51' AS DECIMAL(3,2))"]=> string(4) "3.51" }
Einfachste Lösung, die ich gefunden habe:
Sie können json_encode zwingen, tatsächliche Zahlen für Werte zu verwenden, die wie Zahlen aussehen:
(seit PHP 5.3.3).
Oder Sie können Ihre ID einfach in einen Int umwandeln.
quelle
json_encode
String, um int zu gießen, wie ein Mikroskop, um Nägel zu ersticken.UNIX_TIMESTAMP()
, die beispielsweise von erstellt wurden.Meine Lösung besteht darin, das Abfrageergebnis zu übergeben
$rs
und ein Assoc-Array der gegossenen Daten als Rückgabe zu erhalten:Anwendungsbeispiel:
quelle
Nein. Unabhängig vom in Ihren Tabellen definierten Datentyp liefert der MySQL-Treiber von PHP immer Zeilenwerte als Zeichenfolgen.
Sie müssen Ihre ID in ein int umwandeln.
quelle
Ich mag die Antwort von Chad, besonders wenn die Abfrageergebnisse in einem Browser an Javascript weitergegeben werden. Javascript behandelt sauber numerische Entitäten als Zahlen, erfordert jedoch zusätzliche Arbeit, um numerisch ähnliche Entitäten als Zeichenfolgen zu behandeln. dh muss parseInt oder parseFloat auf ihnen verwenden.
Aufbauend auf der Lösung von Chad verwende ich diese und es ist oft genau das, was ich brauche und erstelle Strukturen, die JSON-codiert werden können, um den Umgang mit Javascript zu vereinfachen.
Das Hinzufügen einer numerischen Zeichenfolge zu 0 erzeugt einen numerischen Typ in PHP und identifiziert den Typ korrekt, sodass Gleitkommazahlen nicht in Ganzzahlen abgeschnitten werden.
quelle
Dies geschieht, wenn die Verbindung aktiviert
PDO::ATTR_EMULATE_PREPARES
isttrue
.Wenn Sie jedoch
false
festlegen, dass die Verwendung von Parametern mehr als einmal nicht zulässig ist. Ich glaube, es wirkt sich auch auf die Qualität der zurückkommenden Fehlermeldungen aus.quelle
Sie können dies tun mit ...
... abhängig von der Erweiterung, die Sie verwenden möchten. Die erste wird nicht empfohlen, da die MySQL-Erweiterung veraltet ist. Der dritte ist noch experimentell.
In den Kommentaren zu diesen Hyperlinks wird gut erklärt, wie Sie Ihren Typ von einer einfachen alten Zeichenfolge auf den ursprünglichen Typ in der Datenbank setzen.
Einige Frameworks abstrahieren dies ebenfalls (CodeIgniter bietet
$this->db->field_data()
).Sie können auch raten - wie das Durchlaufen der resultierenden Zeilen und die Verwendung von is_numeric () für jede Zeile . Etwas wie:
Dies würde alles, was wie eine Zahl aussieht, in eine verwandeln ... definitiv nicht perfekt.
quelle
if (is_float()) { $value = (float)$value; }
In meinem Projekt verwende ich normalerweise eine externe Funktion, die die abgerufenen Daten "filtert"
mysql_fetch_assoc
.Sie können Felder in Ihrer Tabelle umbenennen, um intuitiv zu verstehen, welcher Datentyp gespeichert ist.
Sie können beispielsweise jedem numerischen Feld ein spezielles Suffix hinzufügen: Wenn
userid
es ein istINT(11)
, können Sie es umbenennen,userid_i
oder wenn es ein istUNSIGNED INT(11)
, können Sie es umbenennenuserid_u
. Zu diesem Zeitpunkt können Sie eine einfache PHP-Funktion schreiben, die als Eingabe das assoziative Array empfängt (abgerufen mitmysql_fetch_assoc
), und das Casting auf den mit diesen speziellen "Schlüsseln" gespeicherten "Wert" anwenden.quelle
Wenn vorbereitete Anweisungen verwendet werden, ist der Typ gegebenenfalls int. Dieser Code gibt ein Array von Zeilen zurück, wobei jede Zeile ein assoziatives Array ist. Als ob
fetch_assoc()
für alle Zeilen aufgerufen wurde, jedoch mit beibehaltenen Typinformationen.quelle
MySQL verfügt über Treiber für viele andere Sprachen. Die Konvertierung von Daten in Zeichenfolgen "standardisiert" Daten und überlässt es dem Benutzer, Werte in int oder andere umzuwandeln
quelle
In meinem Fall wurde eine
mysqlnd.so
Erweiterung installiert. ABER ich hatte nichtpdo_mysqlnd.so
. So hatte das Problem durch Ersetzen gelöstpdo_mysql.so
mitpdo_mysqlnd.so
.quelle
Ich mag die Technik von Mastermind , aber die Codierung kann einfacher sein:
Ich habe auch die Überprüfung auf Abfragen hinzugefügt, die false anstelle einer Ergebnismenge zurückgeben.
Und nach einer Zeile mit einem Feld suchen, das einen Nullwert hat.
Und wenn der gewünschte Typ eine Zeichenfolge ist, verschwende ich keine Zeit damit - es ist bereits eine Zeichenfolge.
Ich mache mir nicht die Mühe, dies in den meisten PHP-Codes zu verwenden. Ich verlasse mich nur auf die automatische Typkonvertierung von PHP. Wenn Sie jedoch viele Daten abfragen, um dann arithmetische Berechnungen durchzuführen, ist es sinnvoll, im Voraus die optimalen Typen zu verwenden.
quelle