0x01: проверьте, успешно ли установлен PDO PDO
Запустите следующий код. Если параметр неверен, это означает, что PDO был установлен. Если объект не существует, измените файл конфигурации PHP PHP.INI и отмените комментарии в предыдущих PHP_PDO_YOURSSQLSERVEREHERE.EXTIS.
Кода -копия выглядит следующим образом:
$ test = new PDO ();
0x02: подключиться к базе данных
Запустите сервер Apache и подтвердите, что сервер запускается, а установка PDO успешна. Затем давайте подключимся к базе данных.
Кода -копия выглядит следующим образом:
$ dsn = 'mysql: dbname = demo; host = localhost; port = 3306';
$ username = 'root';
$ password = 'password_here';
пытаться {
$ db = новый PDO ($ dsn, $ username, $ password);
} catch (pdoException $ e) {
умереть ('не удалось подключиться к базе данных:
' $ e);
}
0x03: базовый запрос
Использование запроса и exec в PDO делает запросы базы данных очень простыми. Если вы хотите получить количество рядов результата запроса, оно очень полезно для выбранных операторов запроса.
Кода -копия выглядит следующим образом:
$ atportion = <<< sql
ВЫБИРАТЬ *
От `Foods
Где `здоровый` = 0
SQL;
$ foods = $ db-> Query ($ ratport);
Если приведенный выше запрос верен, $ Foods теперь является объектом оператора PDO, из которого мы можем получить необходимые результаты, и сколько наборов результатов мы запрашили в общей сложности.
0x04: Получите количество рядов
Если вы используете базу данных MySQL, оператор PDO содержит метод RowCount для получения количества строк в наборе результатов, как показано в следующем коде:
Кода -копия выглядит следующим образом:
Echo $ Foods-> RowCount;
0x05: набор результатов обхода
Заказ PDO можно пройти с помощью оператора Forech, как показано в следующем коде:
Кода -копия выглядит следующим образом:
foreach ($ foods-> fetchall () как $ food) {
Echo $ Food ['name']. '
';
}
PDO также поддерживает метод Fetch, который возвращает только первый результат.
0x06: избежать специальных символов, введенных пользователем
PDO предоставляет метод под названием QUOTE, который позволяет специальным символам избежать мест с кавычками в входной строке.
Кода -копия выглядит следующим образом:
$ input = это 'a' '' reefting ranger 'rathing str'ing
После передачи с использованием метода цитаты:
Кода -копия выглядит следующим образом:
$ db-> QUOTE ($ input): 'это/' s/'a/'/'/' симпатичная опасность/'rous str/' ing '
0x07: exec ()
PDO может использовать метод exec () для реализации обновления, удаления и вставки операций. После исполнения он вернет количество затронутых строк:
Кода -копия выглядит следующим образом:
$ atportion = <<< sql
Удалить из `Foods
Где `здоровый '= 1;
SQL;
Echo $ db-> exec ($ ratement);
0x08: заявление о предварительной обработке
Хотя метод EXEC и запрос все еще широко используются и поддерживаются в PHP, официальный веб -сайт PHP по -прежнему требует, чтобы каждый использовал операторы предварительной обработки для их замены. Почему? Главным образом потому, что: это безопаснее. Заявления предварительной обработки не напрямую вставляют параметры в фактические запросы, что позволяет избежать многих потенциальных инъекций SQL.
Однако по какой -то причине PDO на самом деле не использует предварительную обработку. Он имитирует методы предварительной обработки, вставляет данные параметров в операторы, прежде чем передавать оператор серверу SQL, что делает некоторые системы восприимчивыми к инъекции SQL.
Если ваш SQL Server на самом деле не поддерживает предварительную обработку, мы можем легко решить эту проблему, передавая параметры во время инициализации PDO следующим образом:
Кода -копия выглядит следующим образом:
$ db-> setattribute (pdo :: attr_emulate_prepares, false);
Вот наше первое заявление о предварительной обработке:
Кода -копия выглядит следующим образом:
$ antage = $ db-> Prepare ('select * из продуктов, где `name` =? и` healthy` =?');
$ atportion2 = $ db-> Prepare ('select * из продуктов, где `name` =: name и` healthy` =: здоровый)';
Как показано в приведенном выше коде, существует два способа создания параметров, имя и анонимные (не может появиться в одном операторе одновременно). Затем вы можете использовать BindValue для ввода ввода:
Кода -копия выглядит следующим образом:
$ ratement-> bindvalue (1, 'cake');
$ ratement-> bindvalue (2, true);
$ ratement2-> bindvalue (': name', 'pie');
$ ratement2-> bindValue (': eallogy', false);
Обратите внимание, что при использовании названных параметров вы должны включить толстую кишку (:). PDO также имеет метод BindParam, который может связывать числовые значения по ссылке, то есть он ищет соответствующие числовые значения только при выполнении оператора.
Единственное, что осталось сделать сейчас, - это выполнить наш оператор:
Кода -копия выглядит следующим образом:
$ atportion-> execute ();
$ anature2-> execute ();
// Получите наши результаты:
$ cake = $ ratport-> fetch ();
$ pie = $ ratport2-> fetch ();
Чтобы избежать использования только фрагментов кода BindValue, вы можете использовать массив, чтобы дать метод выполнения в качестве параметра, например:
Кода -копия выглядит следующим образом:
$ ratement-> execute (array (1 => 'cake', 2 => true));
$ anature2-> execute (array (': name' => 'pie', ': haldey' => false));
0x09: транзакции
Транзакция состоит в том, чтобы выполнить набор запросов, но не сохраняет их влияние на базу данных. Преимущество этого состоит в том, что если вы выполняете 4 взаимозависимых операторах вставки, когда вы не сработаете, вы можете отказаться назад, чтобы другие данные не могли быть вставлены в базу данных, гарантируя, что взаимозависимые поля могут быть вставлены правильно. Вы должны убедиться, что двигатель базы данных, который вы используете, поддерживают транзакции.
0x10: начальная транзакция
Вы можете просто использовать метод begintransaction () для запуска транзакции:
Кода -копия выглядит следующим образом:
$ db-> begintransaction ();
$ db-> Intrancection (); // истинный!
Затем вы можете продолжать выполнять оператор операции базы данных и отправлять транзакцию в конце:
Кода -копия выглядит следующим образом:
$ db-> commit ();
Существует также метод Rofback (), похожий на MySQLI, но он не откатывается от всех типов (например, с использованием таблицы Drop в MySQL), этот метод не очень надежен, я рекомендую пытаться избежать полагаться на этот метод.
0x11: другие полезные варианты
Есть несколько вариантов, которые вы можете рассмотреть. Они могут быть введены как четвертый параметр, когда ваш объект инициализирован.
Кода -копия выглядит следующим образом:
$ options = array ($ option1 => $ value1, $ option [..]);
$ db = новый PDO ($ dsn, $ username, $ password, $ options);
Pdo :: attr_default_fetch_mode
Вы можете выбрать, какой тип набора результатов вернется PDO, например, PDO :: FETCH_ASSOC, который позволит вам использовать $ result ['colun_name'] или pdo :: fetch_obj, который вернет анонимный объект, чтобы вы могли использовать $ result-> colub_name
Вы также можете поместить результат в определенный класс (модель), установив режим чтения для каждого отдельного запроса, например,:
Кода -копия выглядит следующим образом:
$ Query = $ db-> Query ('select * из `foods`');
$ foods = $ Query-> fetchall (pdo :: fetch_class, 'еда');
Pdo :: attr_errmode
Мы объяснили это выше, но те, кому нравится использовать TryCatch: PDO :: errmode_exception. Если вы хотите бросить предупреждение PHP по какой -либо причине, используйте PDO :: errmode_warning.
Pdo :: attr_timeout
Когда вы беспокоитесь о времени загрузки, вы можете использовать это свойство, чтобы указать время ожидания для вашего запроса за считанные секунды. Обратите внимание, что если время, которое вы устанавливаете, превышают время, исключение E_WARNing по умолчанию будет брошено, если не будет изменено pdo :: attr_errmode.