Я пробовал следовать инструкциям PHP.net для выполнения SELECT
запросов, но я не уверен, как лучше это сделать.
Я хотел бы использовать параметризованный SELECT
запрос, если это возможно, чтобы вернуть ID
в таблице, где name
поле соответствует параметру. Он должен вернуть один, ID
потому что он будет уникальным.
Затем я хотел бы использовать это ID
для INSERT
другой таблицы, поэтому мне нужно будет определить, было ли это успешным или нет.
Я также читал, что вы можете подготовить запросы для повторного использования, но я не знал, как это помогает.
$db = new PDO('mysql:dbname=your_database;host=localhost', 'junior', '444');
$statement->execute(array(':name' => "Jimbo"));
, не могли бы вы объяснить часть Джимбо?:name
. Вызовexecute
здесь выполняется с помощью ассоциативного массива пар заполнитель -> значение. Так что в этом случае:name
заполнитель будет заменен строкой Jimbo. Обратите внимание, что это не просто замена строки, так как значение либо экранируется, либо отправляется по другому каналу, отличному от фактического запроса, что предотвращает любые атаки инъекций.В последнее время я работал с 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, i.e. index of 1 $row_id = $check[1]['id']; // do something }
источник
$check = $q->fetch(PDO::FETCH_ASSOC); if (!empty($check)){ $row_id = $check['id']; // do something }
?Небольшой полный ответ здесь, все готово к использованию:
$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, и на основеid
таблицыusers
мы получилиusername
использованиеfetch();
Надеюсь, это кому-то поможет, наслаждайтесь!
источник
fetchColumn()
чтобы избежать[0]
необходимости. Также не забудьте использоватьLIMIT 1
в SQL.Метод 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);
Хотите узнать больше, посмотрите эту ссылку
источник
если вы используете встроенное кодирование на одной странице и не используете упс, чем используйте этот полный пример, это обязательно поможет
//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 />"; }
источник
field > 6969
выглядит жестко запрограммированным, а не параметризованным.