Intenté seguir las instrucciones de PHP.net para realizar SELECT
consultas, pero no estoy seguro de cuál es la mejor manera de hacerlo.
Me gustaría usar una SELECT
consulta parametrizada , si es posible, para devolver el ID
en una tabla donde el name
campo coincide con el parámetro. Esto debería devolver uno ID
porque será único.
Luego me gustaría usar eso ID
para una INSERT
tabla 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 llamadaexecute
aquí se realiza con una matriz asociativa de marcadores de posición -> pares de valores. Entonces, en este caso, el:name
marcador 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
bindParam
obindValue
para 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 1
y 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í
$dbh
está el conector PDO db, y según laid
tablausers
, obtenemos elusername
usofetch();
Espero que esto ayude a alguien, ¡Disfruta!
fuente
fetchColumn()
para evitar[0]
ser necesitado. Además, recuerde utilizarLIMIT 1
en 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 > 6969
parece estar codificada en lugar de parametrizada.