Я пробовал следовать инструкциям PHP.net для выполнения запросов SELECT
но я не уверен, что это лучший способ сделать это.
Я хотел бы использовать параметризованный запрос SELECT
, если возможно, чтобы вернуть ID
в таблице, где поле name
соответствует параметру. Это должно вернуть один ID
потому что он будет уникальным.
Затем я хотел бы использовать этот ID
для INSERT
в другой таблице, поэтому мне нужно будет определить, было ли это успешным или нет.
Я также читал, что вы можете готовить запросы для повторного использования, но я не был уверен, как это помогает.
Вы выбираете такие данные:
$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
Вы вставляете то же самое:
$statement = $db->prepare("insert into some_other_table (some_id) values (:some_id)"); $statement->execute(array(':some_id' => $row['id']));
Я рекомендую настроить PDO для исключения исключений при ошибке. Затем вы получите PDOException
если какой-либо из запросов завершится неудачно – не нужно явно проверять. Чтобы включить исключения, вызовите это сразу после создания объекта $db
:
$db = new PDO("..."); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
В последнее время я работаю с PDO, и ответ выше полностью прав, но я просто хотел записать, что следующее работает.
$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();
Вы можете использовать методы bindParam
или bindValue
чтобы помочь подготовить ваше утверждение. Это делает вещи более ясными на первый взгляд вместо выполнения $check->execute(array(':name' => $name));
Особенно, если вы связываете несколько значений / переменных.
Проверьте четкий, легко читаемый пример ниже:
$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 }
Если вы ожидаете, что несколько строк удалите LIMIT 1
и измените метод выборки в 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, ie index of 1 $row_id = $check[1]['id']; // do something }
Litle бит полный ответ здесь со всеми готовыми к использованию:
$sql = "SELECT `username` FROM `users` WHERE `id` = :id"; $q = $dbh->prepare($sql); $q->execute(array(':id' => "4")); $done= $q->fetch(); echo $done[0];
Здесь $dbh
– PDO db connecter, и на основе id
от users
таблицы мы получаем username
используя fetch();
Надеюсь, это поможет кому-то, Наслаждайтесь!
Метод 1: метод запроса USE PDO
$stmt = $db->query('SELECT id FROM Employee where name ="'.$name.'"'); $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
Получение числа строк
$stmt = $db->query('SELECT id FROM Employee where name ="'.$name.'"'); $row_count = $stmt->rowCount(); echo $row_count.' rows selected';
Способ 2: Выводы с параметрами
$stmt = $db->prepare("SELECT id FROM Employee WHERE name=?"); $stmt->execute(array($name)); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
Способ 3: Параметры привязки
$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);
Хотите узнать больше, посмотрите ссылку
если вы используете встроенное кодирование на одной странице и не используете oops, чем выполните этот полный пример, это обязательно поможет
//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 />"; }
точно после строки подготавливают добавить код ниже
echo $statement->queryString;