/ / PHP - PDO sa vykonáva pomocou reťazcovej premennej - php, pdo

PHP - PDO spustiť s premennou reťazca - php, pdo

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.