PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Без описания
Поиск в теме | Версия для печати
gheka
Отправлено: 26 Апреля, 2015 - 20:03:34
Частый гость
Покинул форум
Сообщений всего: 191
Дата рег-ции: Февр. 2011
Помог: 2 раз(а)
Здравствуйте начал сейчас разбираться с PDO но при создании файла подключении к базе данных и запроса на выборку SELECT выходит фатальная ошибка, хотя вроде сделал всё правильно.
Вот скрипт соединения с базой
PHP:
скопировать код в буфер обмена
//Имя сервера БД / DSN
$bd_host = "localhost" ;
//Название базы данных
$bd_name = "test_pdo" ;
//Имя пользователя БД
$bd_user = "root" ;
//Пароль к БД
$bd_pass = "" ;
try {
$db = new PDO ( "mysql:host=$bd_host ;bdname=$bd_name ;" , "$bd_user " , "$bd_pass " ) ;
$db -> setAttribute ( PDO:: ATTR_ERRMODE , PDO:: ERRMODE_EXCEPTION ) ;
$db -> exec ( "SET NAMES utf8" ) ;
}
catch ( PDOException $e ) {
echo 'Подключение не удалось: ' . $e -> getMessage ( ) ;
}
define ( "DB_PREFIX" , "test_" ) ;
Вот запрос на выборку
PHP:
скопировать код в буфер обмена
$sql = "SELECT * FROM `" . DB_PREFIX . "user`" ;
$stmt = $db -> query ( $sql ) ;
while ( $row = $stmt -> fetch ( PDO:: FETCH_ASSOC ) ) {
echo $row [ 'id' ] ;
}
И вот что выходит
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected' in Z:\home\magazin_pdo.ru\www\111.php:7 Stack trace: #0 Z:\home\magazin_pdo.ru\www\111.php(7): PDO->query('SELECT * FROM `...') #1 {main} thrown in Z:\home\magazin_pdo.ru\www\111.php on line 7
Даже не знаю что не так. Подскажите пожалуйста где я ошибся?
gheka
Отправлено: 27 Апреля, 2015 - 02:05:27
Частый гость
Покинул форум
Сообщений всего: 191
Дата рег-ции: Февр. 2011
Помог: 2 раз(а)
Вот ещё вопрос по PDO
В просто MYSQLI делал проверку на количество затронутых полей в запросе так
Как такое сделать в PDO?
PHP:
скопировать код в буфер обмена
$sql = "SELECT * FROM `" . DB_PREFIX . "goods` WHERE `status`=?" ;
$stmt = $dbh -> prepare ( $sql ) ;
$stmt = execute
( array ( 1
) ) ;
if ( // что сюда вставить ) {
$goods = $stmt -> fetch ( PDO:: FETCH_ASSOC ) ;
}
Не много по рывшийся нашёл вот такое решение
Оно работает но хотел бы узнать у знающих людей может есть более правильное решение?
PHP:
скопировать код в буфер обмена
$sql = "SELECT * FROM `" . DB_PREFIX . "goods` WHERE `status`=?" ;
$stmt = $dbh -> prepare ( $sql ) ;
$stmt = execute
( array ( 1
) ) ;
if ( $stmt -> rowCount ( ) != 0 ) {
$goods = $stmt -> fetch ( PDO:: FETCH_ASSOC ) ;
}
(Отредактировано автором: 27 Апреля, 2015 - 02:28:25)
gheka
Отправлено: 27 Апреля, 2015 - 12:38:14
Частый гость
Покинул форум
Сообщений всего: 191
Дата рег-ции: Февр. 2011
Помог: 2 раз(а)
DelphinPRO пишет: $stmt->fetchAll()
Это не совсем удобно так как получается что бы получит данные из массива нужно писать вот что
$goods [0]['name']
PHP:
скопировать код в буфер обмена
$sql = "SELECT * FROM `" . DB_PREFIX . "goods` WHERE `status`=?" ;
$stmt = $dbh -> prepare ( $sql ) ;
$stmt = execute
( array ( 1
) ) ;
if ( $goods = $stmt -> fetchAll ( ) ) {
// Получаем название
$goods [ 0 ] [ 'name' ]
}
Есть ещё что то похожее? именно для
(Отредактировано автором: 27 Апреля, 2015 - 12:40:26)
DelphinPRO
Отправлено: 27 Апреля, 2015 - 13:40:59
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
gheka пишет: Это не совсем удобно так как получается что бы получит данные из массива нужно писать вот что
$goods [0]['name']
fetchAll используется для получения нескольких строк, по которым потом проходят циклов для вывода данных
fetch() - возвращает null если строк нет.
Вы бы хоть документацию почитали бы что ли.
или даже так
(Отредактировано автором: 27 Апреля, 2015 - 13:41:48)
-----Чем больше узнаю, тем больше я не знаю.
gheka
Отправлено: 27 Апреля, 2015 - 17:07:37
Частый гость
Покинул форум
Сообщений всего: 191
Дата рег-ции: Февр. 2011
Помог: 2 раз(а)
DelphinPRO пишет: Вы бы хоть документацию почитали бы что ли.
Я читал и пробывал я и написал что для меня fetchAll () именно для проверки пустоты данных не совсем удобна. Про цикл речь не идёт там её самое то применять для выборки отдельных полей.
Другое дело, то что мне нужно. За это большое спасибо.(Отредактировано автором: 27 Апреля, 2015 - 17:08:45)
gheka
Отправлено: 02 Мая, 2015 - 19:02:40
Частый гость
Покинул форум
Сообщений всего: 191
Дата рег-ции: Февр. 2011
Помог: 2 раз(а)
Помогите пожалуйста как вывести ошибку при обновлении записи в PDO
В MYSQLI я это делал так
В PDO делаю так
PHP:
скопировать код в буфер обмена
$sql = "UPDATE `" . DB_PREFIX . "goods` SET `name`=? WHERE `id`=?" ;
$stmt = $dbh -> prepare ( $sql ) ;
$stmt -> execute ( array ( 'текс' , 107
) ) ; if ( ! $stmt )
print_r ( 'Ошибка базы данных ' . $stmt -> errorInfo ( ) ) ;
Но ошибка не выводится, что я неправильно делаю?
РАЗОБРАЛСЯ С ЭТИМ нужно было запрос делать в
PHP:
скопировать код в буфер обмена
try {
// Прибавляем забронированное количество товара, общему количеству
$sql = "UPDATE `" . DB_PREFIX . "goods` SET `name`=? WHERE `id`=?" ;
$stmt = $dbh -> prepare ( $sql ) ;
$stmt -> execute ( array ( 'текс' , 107
) ) ;
}
catch ( PDOException $e ) {
echo 'ошибка: ' . $e -> getMessage ( ) ;
}
ТАК ОШИБКУ ВЫВОДИТ
Но не совсем понятно нужно ли делать TRY () CATCH ()
Для каждого запроса или один раз на странице?(Отредактировано автором: 02 Мая, 2015 - 20:04:01)
exlant
Отправлено: 02 Мая, 2015 - 23:50:39
Посетитель
Покинул форум
Сообщений всего: 425
Дата рег-ции: Февр. 2015
Помог: 14 раз(а)
не обязательно, через TRY{} CATCH(){}
у вас ошибка в этом коде:
PHP:
скопировать код в буфер обмена
$sql = "UPDATE `" . DB_PREFIX . "goods` SET `name`=? WHERE `id`=?" ;
$stmt = $dbh -> prepare ( $sql ) ;
$stmt -> execute ( array ( 'текс' , 107
) ) ; if ( ! $stmt )
print_r ( 'Ошибка базы данных ' . $stmt -> errorInfo ( ) ) ;
не $stmt->errorInfo (), а $dbh->errorInfo()
gheka
Отправлено: 03 Мая, 2015 - 00:56:57
Частый гость
Покинул форум
Сообщений всего: 191
Дата рег-ции: Февр. 2011
Помог: 2 раз(а)
exlant пишет: не обязательно, через TRY{} CATCH(){}
у вас ошибка в этом коде:
PHP:
скопировать код в буфер обмена
$sql = "UPDATE `" . DB_PREFIX . "goods` SET `name`=? WHERE `id`=?" ;
$stmt = $dbh -> prepare ( $sql ) ;
$stmt -> execute ( array ( 'текс' , 107
) ) ; if ( ! $stmt )
print_r ( 'Ошибка базы данных ' . $stmt -> errorInfo ( ) ) ;
не $stmt->errorInfo (), а $dbh->errorInfo()
Нет у меня всё верно надо было просто писать вот так print_r ( $stmt->errorInfo () );
а не так print_r ('Ошибка базы данных ' . $stmt->errorInfo () );
Правильно так
(Отредактировано автором: 03 Мая, 2015 - 00:57:51)
Поиск в теме | Версия для печати
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
Powered by ExBB FM 1.0 RC1. InvisionExBB