Я создал скрипт CMS, написанный с использованием синтаксиса MySQL.
Я хочу заменить синтаксис MySQL синтаксисом PDO. Может кто-нибудь помочь мне сделать это и объяснить мне, как это сделать ?
Это код из сценария.
<?php $querytemp = mysql_query("select * from main_setting") or die (mysql_error()); $row = mysql_fetch_object($querytemp); include "inc/upcenter_block.php"; echo " <div class='headmenu'>$row->news1</div> <div class='bodymenu'> <p>".nl2br($row->news)."</p> </div> "; include "inc/downcenter_block.php"; ?>
Сначала, если вы хотите изменить с mysql_*
на PDO
вам нужно будет изменить все ваши коды в скрипте, а не только один, который просто не работает
и если вы собираетесь изменить коды от mysql_ * до PDO
вам нужно будет изменить соединение с базой данных с помощью PDO
здесь образец для этого:
// here we set the variables $dbhost = "localhost"; $dbname = "testcreate"; $dbuser = "root"; $dbpass = "mysql"; // here we are using ( try {} ) to catch the errors that will shows up and handle it in a nicer way try { $db = new PDO('mysql:host='.$dbhost.';dbname='.$dbname.';charset=utf-8', ''.$dbuser.'', ''.$dbpass.''); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { echo 'Error : <br>' . $e->getMessage(); }
// here we set the varible for the connection = then starting the cennction with new POD(); $db = new PDO('mysql:host='.$dbhost.';dbname='.$dbname.';charset=utf-8', ''.$dbuser.'', ''.$dbpass.'');
// here we set an Attribute to handle the errors $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // you dont need to use it in our case because we already catching the error and handling it in out way
// here we catch the error then handling it by echo a msg and then we used // $e->getMessage(); to get the error msg that should be throwing in the page catch (PDOException $e) { echo 'Error : <br>' . $e->getMessage(); }
теперь, когда мы закончили с подключением, я покажу вам, как запрашивать и извлекать таблицы
// this is how we will use query $qr = $db->query() // and this is how to fetch it by taking the query variable and use the arrow then fetch $ro = $qr->fetch()
iwill покажет вам пример для вашего кода
$querytemp = mysql_query("select * from main_setting") or die (mysql_error()); $row = mysql_fetch_object($querytemp);
мы изменим это на
$querytemp = $db->query("select * from main_setting"); $row = $querytemp->fetch(PDO::FETCH_OBJ);
поэтому теперь вы можете использовать $row->news
с PDO
и теперь вы можете легко изменить свои коды на PDO
Преобразование этого сценария будет чем-то вроде:
// $pdo = connection try { $stmt = $pdo->prepare("select * from main_setting"); $stmt->execute(); $row = $stmt->fetch(PDO::FETCH_OBJ); } catch (\PDOException $e) { // something went wrong } // ...
Вот объяснение:
PDO::prepare
создаст подготовленный оператор из запроса MYSQL и сохранит его в переменной. PDOStatement::execute
выполнит подготовленный оператор, используя массив переданных ему параметров (в этом случае нет, поскольку запрос не имеет никакого параметра). PDOStatement::fetch
будет PDOStatement::fetch
результаты последнего выполнения. По умолчанию он выбирается в массив. Если вы передадите PDO::FETCH_OBJ
он будет входить в объект. PDO по умолчанию использует исключения, что означает, что вы можете использовать блок try-catch для исключения ошибки (типа исключения PDOException
).
Также обратите внимание:
$stmt = $pdo->prepare("select * from main_setting"); $stmt->execute();
можно сократить, используя PDO::query
, чтобы:
$stmt = $pdo->query("select * from main_setting");