Eu tentei seguir as instruções do PHP.net para fazer SELECT
consultas, mas não tenho certeza da melhor maneira de fazer isso.
Gostaria de usar uma SELECT
consulta parametrizada , se possível, para retornar o ID
em uma tabela onde o name
campo corresponde ao parâmetro. Isso deve retornar um ID
porque será exclusivo.
Eu gostaria então de usar isso ID
em uma INSERT
outra tabela, então terei de determinar se foi bem-sucedido ou não.
Também li que você pode preparar as consultas para reutilização, mas não tinha certeza de como isso ajuda.
$db = new PDO('mysql:dbname=your_database;host=localhost', 'junior', '444');
$statement->execute(array(':name' => "Jimbo"));
, você pode explicar a parte do Jimbo?:name
. Chamarexecute
aqui é feito com uma matriz associativa de pares de espaço reservado -> valor. Portanto, neste caso, o:name
placeholder será substituído pela string Jimbo. Observe que não se trata simplesmente de uma substituição de string, pois o valor é escapado ou enviado por um canal diferente da consulta real, evitando, assim, qualquer tipo de ataques de injeção.Tenho trabalhado com o PDO recentemente e a resposta acima está completamente certa, mas eu só queria documentar que o seguinte também 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();
fonte
Você pode usar os métodos
bindParam
oubindValue
para ajudar a preparar sua declaração. Isso torna as coisas mais claras à primeira vista, em vez de fazer,$check->execute(array(':name' => $name));
especialmente se você estiver vinculando vários valores / variáveis.Verifique o exemplo claro e fácil de ler abaixo:
$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 }
Se você estiver esperando várias linhas, remova o
LIMIT 1
e altere o método de busca parafetchAll
:$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 }
fonte
$check = $q->fetch(PDO::FETCH_ASSOC); if (!empty($check)){ $row_id = $check['id']; // do something }
faz?Uma resposta um pouco mais completa está aqui com tudo pronto para uso:
$sql = "SELECT `username` FROM `users` WHERE `id` = :id"; $q = $dbh->prepare($sql); $q->execute(array(':id' => "4")); $done= $q->fetch(); echo $done[0];
Aqui
$dbh
está o conector PDO db, e com base naid
tabelausers
,username
usamosfetch();
Espero que isso ajude alguém, Divirta-se!
fonte
fetchColumn()
para evitar[0]
ser necessário. Além disso, lembre-se de usarLIMIT 1
no SQL.Método 1: USE o método de consulta PDO
$stmt = $db->query('SELECT id FROM Employee where name ="'.$name.'"'); $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
Obtendo Contagem de Linha
$stmt = $db->query('SELECT id FROM Employee where name ="'.$name.'"'); $row_count = $stmt->rowCount(); echo $row_count.' rows selected';
Método 2: declarações com parâmetros
$stmt = $db->prepare("SELECT id FROM Employee WHERE name=?"); $stmt->execute(array($name)); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
Método 3: Parâmetros de ligação
$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);
Quer saber mais veja este link
fonte
se você estiver usando codificação embutida em uma única página e não usar ops, então vá com este exemplo completo, com certeza ajudará
//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 />"; }
fonte
field > 6969
parece codificada em vez de parametrizada.