Nechápem, prečo to funguje:
$stmt->execute([":id" => "*",":email" => "email@gmail.com",":password" => "123456789",]);
a to nie (neplatné číslo parametra: počet viazaných premenných sa nezhoduje s počtom tokenov):
$params = "":id" => "*",":email" => "email@gmail.com",":password" => "123456789","
$stmt->execute([$params]);
Toto ma zbláznilo!
Snažil som sa hľadať inú podobnú otázku, ale nemôžem ju nájsť.
EDIT: Snažím sa takto:
$params = array("qualsiasi"=>"*", "email"=>"email@gmail.com", "password"=>"123456789");
$q = "SELECT :qualsiasi FROM utenti WHERE email = :email AND password = :password";
$stmt = $db->prepare($q);
foreach ($params as $key => $param){
$token = ":" . $key;
$stmt->bindParam($token , $param);
}
$stmt->execute();
Funguje to, vykoná sa CHOP, ale v databáze sa nezhoduje s hodnotami, ale mala by. Naozaj neviem, prečo ...
odpovede:
2 pre odpoveď č. 1[$params]
s $params
byť reťazec nevytvára pole s viacerými kľúčmi bez ohľadu na to, aký je reťazec. Vytvorí iba pole s jednou číselne označenou položkou, kde hodnota tejto položky je celá $params
string.
Preto skončíte odovzdaním poľa jednej položky ->execute()
, ktorý teda nepracuje pre dopyt s viacerými parametrami.
N.B. že aj keby mal váš dotaz jediný parameter, skončili by ste chybnou hodnotou, pretože namiesto [":foo" => "bar"]
(key :foo
, hodnota :bar
) bude to prechádzať ["":foo" => ":bar""]
(index 0
, hodnota ":foo" => ":bar"
).
1 pre odpoveď č. 2
pretože
$params = "":id" => "*",":email" => "email@gmail.com",":password" => "123456789","
$stmt->execute([$params]);
mení sa v
$stmt->execute(["":id" => "*",":email" => "email@gmail.com",":password" => "123456789","]);
Nie je to rovnaké ako
$stmt->execute([
":id" => "*",
":email" => "email@gmail.com",
":password" => "123456789",
]);
Vidíte rozdiel? Reťazec vložený medzi hranaté zátvorky sa nezmení na a key => value
array. Stáva sa z nej jedno pole s reťazcom, ktorý je vašou jedinou hodnotou.