J'ai essayé de suivre les instructions de PHP.net pour faire des SELECT
requêtes mais je ne suis pas sûr de la meilleure façon de procéder.
Je voudrais utiliser une SELECT
requête paramétrée , si possible, pour renvoyer le ID
dans une table où le name
champ correspond au paramètre. Cela devrait en renvoyer un ID
car il sera unique.
Je voudrais ensuite utiliser cela ID
pour une INSERT
autre table, donc je devrai déterminer si cela a réussi ou non.
J'ai également lu que vous pouvez préparer les requêtes pour la réutilisation, mais je ne savais pas comment cela pouvait aider.
$db = new PDO('mysql:dbname=your_database;host=localhost', 'junior', '444');
$statement->execute(array(':name' => "Jimbo"));
, pouvez-vous expliquer la partie Jimbo?:name
. L'appelexecute
ici se fait avec un tableau associatif de paires d'espace réservé -> valeurs. Donc, dans ce cas, l':name
espace réservé sera remplacé par la chaîne Jimbo. Notez qu'il ne s'agit pas simplement d'un remplacement de chaîne, car la valeur est soit échappée, soit envoyée sur un canal différent de la requête réelle, empêchant ainsi tout type d'attaque par injection.J'ai travaillé avec PDO ces derniers temps et la réponse ci-dessus est tout à fait correcte, mais je voulais juste documenter que ce qui suit fonctionne é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();
la source
Vous pouvez utiliser les méthodes
bindParam
oubindValue
pour vous aider à préparer votre relevé. Cela rend les choses plus claires à première vue au lieu de le faire$check->execute(array(':name' => $name));
Surtout si vous liez plusieurs valeurs / variables.Consultez 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 modifiez la méthode de récupération enfetchAll
:$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 }
la source
$check = $q->fetch(PDO::FETCH_ASSOC); if (!empty($check)){ $row_id = $check['id']; // do something }
?Une petite réponse 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];
Voici le
$dbh
connecteur PDO db, et basé sur leid
tableau,users
nous obtenons l'username
utilisationfetch();
J'espère que cela aidera quelqu'un, profitez-en!
la source
fetchColumn()
pour éviter d'[0]
être nécessaire. N'oubliez pas non plus d'utiliserLIMIT 1
dans le SQL.Méthode 1: Utiliser la méthode de requête 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: déclarations 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: Lier les paramètres
$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 ce lien
la source
si vous utilisez le codage en ligne sur une seule page et que vous n'utilisez pas Oups, allez avec cet exemple complet, cela vous aidera certainement
//connect to the db $dbh = new PDO('mysql:host=localhost;dbname=mydb', dbuser, dbpw); //build the query $query="SELECT field1, field2 FROM ubertable WHERE field1 > 6969"; //execute the query $data = $dbh->query($query); //convert result resource to array $result = $data->fetchAll(PDO::FETCH_ASSOC); //view the entire array (for testing) print_r($result); //display array elements foreach($result as $output) { echo output[field1] . " " . output[field1] . "<br />"; }
la source
field > 6969
semble codée en dur plutôt que paramétrée.