Rolf B: PHP PDO Bind Parameters Wo sinnvoll?

Beitrag lesen

Hallo MB,

meinen Beitrag von 17:33 hast Du gelesen?

Sodann ist ARRAY('1') kein Integerwert. Es ist ein Array mit einem String-Wert drin. Dieser String sieht aus wie eine Zahl, aber der PHP Datentyp ist STRING.

Ich gebe zu, dass PHP einem die Sache wirklich nicht leicht macht. Durch den eingebauten Type-Juggler kann man meistens mit dem falschen Typ arbeiten, ohne es zu merken. MYSQL ist da auch nicht strikter. Diese Bequemlichkeitsangebote hindern Programmierer daran, exakt zu arbeiten und damit die Effizienzvorteile von korrekten Typen zu nutzen.

$a = "1";
echo "\$a enthält $a, der Typ ist " . gettype($a) . "\n";

$b = 1;
echo "\$b enthält $b, der Typ ist " . gettype($b) . "\n";

// $a wird implizit in int umgewandelt
echo "$a + $b ergibt " . ($a + $b) . "\n";

// $b wird implizit in string umgewandelt
echo "$a . $b ergibt " . ($a . $b) . "\n";

liefert diese Ausgabe:

$a enthält 1, der Typ ist string
$b enthält 1, der Typ ist integer
1 + 1 ergibt 2
1 . 1 ergibt 11

Nochmal zu deiner Frage:

$stmt = $pdo->prepare("SELECT ?");
$stmt->execute(array('1'));

ist das gleiche wie

$stmt = $pdo->query("SELECT '1'");

Das liefert Dir eine Row mit einer Spalte darin. In dieser Spalte befindet sich der String-Wert '1'.

Und

$stmt = $pdo->prepare("SELECT ?");
$stmt->execute(array(1));

ist das gleiche wie

$stmt = $pdo->query("SELECT 1");

Das liefert Dir eine Row mit einer Spalte darin. In dieser Spalte befindet sich der Integer-Wert 1.

Wenn es das ist, was Du willst, ja, dann geht SELECT ?.

Rolf

--
sumpsi - posui - clusi