XtGem Forum catalog
Home

Руководство Php Mysql

Обзорный пример расширения MySQL · MySQL — Функции СУБД MySQL. mysql_affected_rows — Возвращает число затронутых прошлой операцией.

руководство php mysql

PDO_MYSQL is a driver that implements the PHP Data Objects (PDO) interface to enable access from PHP to MySQL 3.x, 4.x and 5.x databases. PDO_MYSQL.

Пример #1 Пример работы с MySQL <?php // Соединяемся, выбираем базу данных $link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password') or die('Не удалось соединиться: ' . mysql_error()); echo 'Соединение успешно установлено'; mysql_select_db('my_database') or die('Не удалось выбрать базу данных'); // Выполняем SQL-запрос $query = 'SELECT * FROM my_table'; $result = mysql_query($query) or die('Запрос не удался: ' . mysql_error()); // Выводим результаты в html echo "<table>\ "; while...

PHP: MySQL (PDO) - Manual

Обзорный пример расширения MySQL ¶. Этот простой пример показывает, как соединиться с базой данных, выполнить запрос, распечатать результат.

Основные источники – это руководство по PHP (www. php.net) и MySQL (www. mysql.com). Также при подготовке статьи использовались.

Обзорный пример расширения MySQL

PDO_MYSQL is a driver that implements the PHP Data Objects (PDO) interface to enable access from PHP to MySQL 3.x, 4.x and 5.x databases. PDO_MYSQL will take advantage of native prepared statement support present in MySQL 4.1 and higher. If you're using an older version of the mysql client libraries, PDO will emulate them for you. Установка Используйте --with-pdo-mysql[=DIR] для установки расширения PDO MySQL, где необязательный параметр [=DIR] указывает директорию, где установлена MySQL. Если mysqlnd передается в параметре [=DIR], то будет использован родной драйвер MySQL. Дополнительный параметр --with-mysql-sock[=DIR] указывает расположение unix-сокета MySQL для всех MySQL расширений, включая PDO_MYSQL. Если параметр не указан, поиск производится в директориях по умолчанию. Дополнительный параметр --with-zlib-dir[=DIR] используется как префикс пути к libz. Предопределенные константы Перечисленные ниже константы определены данным драйвером и будут доступны только в случае, если PHP был собран с поддержкой этого расширения или данное расширение было подгружено динамечески во время выполнения. Вдобавок, эти драйверо-зависимые константы должны быть использованы только совместно с этим драйвером. Использование атрибутов, специфичных для некоторого драйвера с другим драйвером может вызвать неожиданное поведенние. Если ваш код выполняется с несколькими драйверами, то можно использовать функцию PDO::getAttribute() для получения атрибута PDO_ATTR_DRIVER_NAME для проверки драйвера. PDO::MYSQL_ATTR_USE_BUFFERED_QUERY (integer) Если этот аттрибут установлен в TRUE в PDOStatement, MySQL драйвер будет использовать буферизованные версии MySQL API. Если вы пишете переносимый на другие библиотеки код, вы должны использовать PDOStatement::fetchAll(). Пример #1 Буферизация запросов в MySQL <?php if ($db->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') { $stmt = $db->prepare('select * from foo', array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true)); } else { die("my application only works with mysql; I should use \\$stmt->fetchAll() instead"); } ?> PDO is much better option for calling procedures, views or triggers of mysql 5.x versions from PHP instead of using mysqli extension. Following is a simple demo script which can help anybody on how to call and use mysql procedures through php try { $dbh = new PDO('mysql:host=xxx;port=xxx;dbname=xxx', 'xxx', 'xxx', array( PDO::ATTR_PERSISTENT => false)); $stmt = $dbh->prepare("CALL getname()"); // call the stored procedure $stmt->execute(); echo "<B>outputting...</B><BR>"; while ($rs = $stmt->fetch(PDO::FETCH_OBJ)) { echo "output: ".$rs->name."<BR>"; } echo "<BR><B>".date("r")."</B>"; } catch (PDOException $e) { print "Error!: " . $e->getMessage() . "<br/>"; die(); } Today's PHP snapshot now has SSL support for PDO. Follow the directions here ( http://dev.mysql.com/doc/refman/5.0/en/secure-create-certs.html ) to set up MySQL and then use the following connection options: <?php $pdo = new PDO( 'mysql:host=hostname;dbname=ssldb', 'username', 'password', array( PDO::MYSQL_ATTR_SSL_KEY =>'/path/to/client-key.pem', PDO::MYSQL_ATTR_SSL_CERT=>'/path/to/client-cert.pem', PDO::MYSQL_ATTR_SSL_CA =>'/path/to/ca-cert.pem' ) ); ?> I have been getting the error below when performing multiple queries within a single page. Setting the attribute below did not seem to work for me. So building on previous example i am initilizing my stmt variable on every query and a fetch all into an array. Seems to be working for me. Error: PDO Error 1.1: Array ( [0] => xxx[1] => yyy[2] => Lost connection to MySQL server during query ) Fix: (PDO::setAttribute("PDO::MYSQL_ATTR_USE_BUFFERED_QUERY", true);) <? try { $dbh = new PDO('mysql:host=xxx;port=xxx;dbname=xxx', 'xxx', 'xxx', array( PDO::ATTR_PERSISTENT => false)); $stmt = $dbh->prepare("CALL getname()"); // call the stored procedure $stmt->execute(); // fetch all rows into an array. $rows = $stmt->fetchAll(); foreach ($rows as $rs) { $id = $rs['id']; } //initilise the statement unset($stmt); $stmt = $dbh->prepare("call secondprocedure(?);"); $stmt->bindValue(1, $id); if ( ! $stmt->execute() ) { echo "PDO Error 1.1:\ "; print_r($stmt->errorInfo()); exit; } unset($stmt); } catch (PDOException $e) { print "Error!: " . $e->getMessage() . "<br/>"; die(); } ?> This page suggests that the constant PDO::MYSQL_ATTR_FOUND_ROWS was always available (no note "exists as of X.X"), but I found the constant missing on an installation with PHP 5.2. After switching the PHP version to 5.3.27 on the webspace the constant was available. SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. ... After spending hours trying to track down why we were getting this error on a new server, after the same code ran fine on other servers, we found the problem to be an old MySQL _client_ library running on our web server, and a latest-version MySQL _server_ running on the database server's box. Upgraded the MySQL client on the web server to the current revision and the problem went away. Here is a real world example of a PHP PDO MySQL Data Entry App with SQL Insert and redirect to a report to show the data "just entered" as auto-generated by an expert system, WizzyWeb $handler = new PDO('mysql:host=localhost;dbname=db', 'username', 'password'); $sql = "INSERT INTO Employees (EmployeeFirstName, EmployeeLastName, EmployeeOffice, EmployeeDepartment, EmployeeEmailAddress, EmployeeExtension, EmployeeTitle) VALUES (:EmployeeFirstName, :EmployeeLastName, :EmployeeOffice, :EmployeeDepartment, :EmployeeEmailAddress, :EmployeeExtension, :EmployeeTitle)"; $query = $handler->prepare($sql); $query->execute(array( ':EmployeeFirstName' => $EmployeeFirstName, ':EmployeeLastName' => $EmployeeLastName, ':EmployeeOffice' => $EmployeeOffice, ':EmployeeDepartment' => $EmployeeDepartment, ':EmployeeEmailAddress' => $EmployeeEmailAddress, ':EmployeeExtension' => $EmployeeExtension, ':EmployeeTitle' => $EmployeeTitle )); // You can uncomment this code to see which PDO drivers are available and troubleshoot the PDO database connection //try { // print_r(PDO::getAvailableDrivers()); # Enumerates available PDO drivers available // $handler = new PDO('mysql:host=localhost;dbname=db1', 'username', 'password'); // $handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //} catch(PDOException $e) { // echo $e->getMessage(); // die(); //} header("Location: http://www.wizzyweb.com/php/report.php"); So, I'm trying to get one PHP file to be able to call from two SQL databases at the same time. How can I do that? Or rather, how can I close a connection being made by SqltoAssoc PDO function so I can start a second one with a completely different SQL database? Thanks in advanced!

Справочное руководство по MySQL 1.4.4 Насколько большими могут быть таблицы в MySQL? 1.5 Что представляет собой компания MySQL AB?