Intenté seguir las instrucciones de PHP.net para realizar SELECTconsultas, pero no estoy seguro de cuál es la mejor manera de hacerlo.
Me gustaría usar una SELECTconsulta parametrizada , si es posible, para devolver el IDen una tabla donde el namecampo coincide con el parámetro. Esto debería devolver uno IDporque será único.
Luego me gustaría usar eso IDpara una INSERTtabla en otra, así que tendré que determinar si fue exitoso o no.
También leí que puede preparar las consultas para su reutilización, pero no estaba seguro de cómo esto ayuda.

$db = new PDO('mysql:dbname=your_database;host=localhost', 'junior', '444');$statement->execute(array(':name' => "Jimbo"));, ¿puedes explicar la parte de Jimbo?:name. La llamadaexecuteaquí se realiza con una matriz asociativa de marcadores de posición -> pares de valores. Entonces, en este caso, el:namemarcador de posición se reemplazará con la cadena Jimbo. Tenga en cuenta que no se trata simplemente de un reemplazo de cadena, ya que el valor se escapa o se envía a través de un canal diferente al de la consulta real, evitando así cualquier tipo de ataques de inyección.He estado trabajando con PDO últimamente y la respuesta anterior es completamente correcta, pero solo quería documentar que lo siguiente también funciona.
$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();fuente
Puede utilizar los métodos
bindParamobindValuepara ayudar a preparar su declaración. Hace las cosas más claras a primera vista en lugar de hacerlo,$check->execute(array(':name' => $name));especialmente si está vinculando múltiples valores / variables.Consulte el ejemplo claro y fácil de leer a continuación:
$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 espera varias filas, elimine
LIMIT 1y cambie el método de recuperación afetchAll:$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 }fuente
$check = $q->fetch(PDO::FETCH_ASSOC); if (!empty($check)){ $row_id = $check['id']; // do something }?Una pequeña respuesta completa está aquí con todo listo para usar:
$sql = "SELECT `username` FROM `users` WHERE `id` = :id"; $q = $dbh->prepare($sql); $q->execute(array(':id' => "4")); $done= $q->fetch(); echo $done[0];Aquí
$dbhestá el conector PDO db, y según laidtablausers, obtenemos elusernameusofetch();Espero que esto ayude a alguien, ¡Disfruta!
fuente
fetchColumn()para evitar[0]ser necesitado. Además, recuerde utilizarLIMIT 1en SQL.Método 1: USE el método de consulta PDO
$stmt = $db->query('SELECT id FROM Employee where name ="'.$name.'"'); $results = $stmt->fetchAll(PDO::FETCH_ASSOC);Obtener el recuento de filas
$stmt = $db->query('SELECT id FROM Employee where name ="'.$name.'"'); $row_count = $stmt->rowCount(); echo $row_count.' rows selected';Método 2: declaraciones con parámetros
$stmt = $db->prepare("SELECT id FROM Employee WHERE name=?"); $stmt->execute(array($name)); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);Método 3: enlazar parámetros
$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);Quieres saber más mira este enlace
fuente
Si está usando codificación en línea en una sola página y no usa oops, vaya con este ejemplo completo, seguramente ayudará
//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 />"; }fuente
field > 6969parece estar codificada en lugar de parametrizada.