J'ai essayé de suivre les instructions de PHP.net pour effectuer des requêtes SELECT
mais je ne suis pas sûr du meilleur moyen de s'y prendre.
J'aimerais utiliser une requête SELECT
paramétrée, si possible, pour renvoyer le ID
dans une table où le champ name
correspond au paramètre. Cela devrait retourner un ID
car il sera unique.
Je voudrais ensuite utiliser ce ID
pour un INSERT
dans une autre table. Je vais donc devoir déterminer si cela a réussi ou non.
J'ai également lu que vous pouvez préparer les requêtes en vue de leur réutilisation, mais je ne savais pas comment cela aiderait.
Vous sélectionnez des données comme ceci:
$db = new PDO("...");
$statement = $db->prepare("select id from some_table where name = :name");
$statement->execute(array(':name' => "Jimbo"));
$row = $statement->fetch(); // Use fetchAll() if you want all results, or just iterate over the statement, since it implements Iterator
Vous insérez de la même manière:
$statement = $db->prepare("insert into some_other_table (some_id) values (:some_id)");
$statement->execute(array(':some_id' => $row['id']));
Je vous recommande de configurer PDO pour qu'il lève des exceptions en cas d'erreur. Vous obtiendrez alors un PDOException
si l'une des requêtes échoue - inutile de vérifier explicitement. Pour activer les exceptions, appelez-le juste après avoir créé le $db
objet:
$db = new PDO("...");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
Je travaille avec PDO récemment et la réponse ci-dessus est tout à fait juste, mais je voulais simplement documenter que les éléments suivants fonctionnent également.
$nametosearch = "Tobias";
$conn = new PDO("server", "username", "password");
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sth = $conn->prepare("SELECT `id` from `tablename` WHERE `name` = :name");
$sth->bindParam(':name', $nametosearch);
// Or sth->bindParam(':name', $_POST['namefromform']); depending on application
$sth->execute();
Vous pouvez utiliser les méthodes bindParam
ou bindValue
pour préparer votre déclaration. Cela rend les choses plus claires à première vue au lieu de $check->execute(array(':name' => $name));
Surtout si vous liez plusieurs valeurs/variables.
Cochez l'exemple clair et facile à lire ci-dessous:
$q = $db->prepare("SELECT id FROM table WHERE forename = :forename and surname = :surname LIMIT 1");
$q->bindValue(':forename', 'Joe');
$q->bindValue(':surname', 'Bloggs');
$q->execute();
if ($q->rowCount() > 0){
$check = $q->fetch(PDO::FETCH_ASSOC);
$row_id = $check['id'];
// do something
}
Si vous attendez plusieurs lignes supprimez le LIMIT 1
et changez la méthode de récupération en fetchAll
:
$q = $db->prepare("SELECT id FROM table WHERE forename = :forename and surname = :surname");// removed limit 1
$q->bindValue(':forename', 'Joe');
$q->bindValue(':surname', 'Bloggs');
$q->execute();
if ($q->rowCount() > 0){
$check = $q->fetchAll(PDO::FETCH_ASSOC);
//$check will now hold an array of returned rows.
//let's say we need the second result, i.e. index of 1
$row_id = $check[1]['id'];
// do something
}
Une réponse un peu complète est ici avec tout prêt à l'emploi:
$sql = "SELECT `username` FROM `users` WHERE `id` = :id";
$q = $dbh->prepare($sql);
$q->execute(array(':id' => "4"));
$done= $q->fetch();
echo $done[0];
Ici $dbh
Est un connecteur PDO db, et basé sur id
de la table users
, nous obtenons le username
en utilisant fetch();
J'espère que cela aidera quelqu'un, profitez-en!
Méthode 1: Méthode de requête USE PDO
$stmt = $db->query('SELECT id FROM Employee where name ="'.$name.'"');
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
Obtenir le nombre de lignes
$stmt = $db->query('SELECT id FROM Employee where name ="'.$name.'"');
$row_count = $stmt->rowCount();
echo $row_count.' rows selected';
Méthode 2: Instructions avec paramètres
$stmt = $db->prepare("SELECT id FROM Employee WHERE name=?");
$stmt->execute(array($name));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
Méthode 3: Paramètres de liaison
$stmt = $db->prepare("SELECT id FROM Employee WHERE name=?");
$stmt->bindValue(1, $name, PDO::PARAM_STR);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
**bind with named parameters**
$stmt = $db->prepare("SELECT id FROM Employee WHERE name=:name");
$stmt->bindValue(':name', $name, PDO::PARAM_STR);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
or
$stmt = $db->prepare("SELECT id FROM Employee WHERE name=:name");
$stmt->execute(array(':name' => $name));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
Vous voulez en savoir plus, regardez ceci lien