Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Подготавливаемый (параметризированный) запрос

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: MySQL
fiction
Отправлено: 02 Июня, 2013 - 10:23:57
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




Итак, используется база данных MySQL, у меня есть класс вида:
PHP:
скопировать код в буфер обмена
  1.  
  2. class DB_c extends DB_data
  3.     {
  4.         private $cn;
  5.         public $db_select;
  6.  
  7.         function __construct()
  8.         {
  9.             $this->open_connection();
  10.         }
  11.         private function open_connection()
  12.         {
  13.             $this->cn = mysql_connect($this->DB_HOST, $this->DB_USER, $this->DB_PASS);
  14.             if (!$this->cn)
  15.                 die ("<br />connection to db failed - ".mysql_error()."<br />");
  16.             else
  17.             {
  18.                 $this->db_select = mysql_select_db($this->DB_NAME, $this->cn);
  19.                 if(!$this->db_select)
  20.                     die("<br />selection of db is failed - ".mysql_error()."<br />");
  21.             }
  22.             mysql_query("set names utf8") or die ("<br /> set names utf8 failed <br />");
  23.         }
  24.  
  25.         function obtain_data($smth, $table_name)
  26.         {
  27.             $result = $this->cn->prepare("select (:smth) from (:table)");  //строка с ошибкой
  28.             $result->bindParam(':smth', $smth);
  29.             $result->bindParam(':table', $table_name);
  30.  
  31.             $result->execute();
  32.  
  33.             $num = mysql_num_rows($result);
  34.             for ($i = 0; $i < $num; $i++)
  35.             {
  36.                 $res[] = $result->fetch();
  37.             }
  38.             $res['e_nm'] = $num;
  39.             return $res;
  40.         }
  41.        
  42.     }
  43.  
  44.  


Выдает ошибку :
Fatal error: Call to a member function prepare() on a non-object in L:\home\my.cm.test.ru\www\config\db-config.php on line 30 (строка с ошибкой помечена в коде выше комментарием). Что происходит не пойму?

И еще вопрос, применима ли данная конструкция:

к результату полученному с помощью параметризированного запроса? И если нет то какой есть аналог?
 
 Top
esterio
Отправлено: 02 Июня, 2013 - 11:39:48
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




mysql не имеет обьектного подхода и она не поддержывает prepared statement. для етих целей подойдет mysqli
 
 Top
fiction
Отправлено: 02 Июня, 2013 - 15:51:33
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




Изменил класс с использованием PDO:

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4.         require_once $_SERVER['DOCUMENT_ROOT']."/config/db-config-data.php";
  5.         class DB_c extends DB_data
  6.         {
  7.                 private $DBH;
  8.                 var $db_select;
  9.                
  10.                 function __construct()
  11.                 {
  12.                         $this->open_connection();
  13.                         //echo "Connection is set, DB is - $this->DB_NAME";
  14.                 }
  15.                 private function open_connection()
  16.                 {
  17.                         try
  18.                         {
  19.                                 $DBH = new PDO("mysql:host={$this->DB_HOST};dbname={$this->DB_NAME}", "{$this->DB_USER}", "{$this->DB_PASS}");  
  20.                                 mysql_query("set names utf8") or die ("<br /> set names utf8 failed <br />");
  21.                                 $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
  22.                         }
  23.                         catch(PDOException $e)
  24.                         {
  25.                         die($this->ERROR_MSG);  
  26.                         file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
  27.                 }
  28.                 }
  29.                 function obtain_data($table_name)
  30.                 {
  31.                         try
  32.                         {
  33.                                 $STH = $DBH->prepare("SELECT * FROM (:table_name)");
  34.                                 $STH->bindParam(table_name, $table_name);
  35.                                 $STH->execute();
  36.  
  37.                                 $STH->setFetchMode(PDO::FETCH_ASSOC);
  38.                                 $num = $STH->rowCount();
  39.                                 for ($i = 0; $i < $num; $i++)
  40.                                 {
  41.                                         $res[] = $STH->fetch();
  42.                                 }
  43.  
  44.                                 $res['e_nm'] = $num;
  45.                         }
  46.                         catch(PDOException $e)
  47.                         {
  48.                         die($this->ERROR_MSG);  
  49.                         file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
  50.                 }
  51.                 }
  52.                 function obtain_data_c($smth, $table_name, $condition_column, $condition)
  53.                 {
  54.                         try
  55.                         {
  56.                                 $STH = $DBH->prepare("SELECT * FROM (:table_name) WHERE (:condition_column) = (:condition)");
  57.                                 $STH->bindParam(table_name, $table_name);
  58.                                 $STH->bindParam(condition_column, $condition_column);
  59.                                 $STH->bindParam(condition, $condition);
  60.                                 $STH->execute();
  61.  
  62.                                 $STH->setFetchMode(PDO::FETCH_ASSOC);
  63.                                 $num = $STH->rowCount();
  64.                                 for ($i = 0; $i < $num; $i++)
  65.                                 {
  66.                                         $res[] = $STH->fetch();
  67.                                 }
  68.  
  69.                                 $res['e_nm'] = $num;
  70.  
  71.                                 return $res;
  72.                         }
  73.                         catch(PDOException $e)
  74.                         {
  75.                         die($this->ERROR_MSG);  
  76.                         file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
  77.                 }
  78.                 }
  79.  
  80.                 function sql($query)
  81.                 {
  82.                         try
  83.                         {
  84.                                 $sql_res = $DBH->query($query); //Ошибка здесь
  85.  
  86.                                 return $sql_res;
  87.                         }
  88.                         catch(PDOException $e)
  89.                         {
  90.                         die($this->ERROR_MSG);  
  91.                         file_put_contents('/PDOErrors.txt', $e->getMessage(), FILE_APPEND);
  92.                 }
  93.                 }
  94.                
  95.         }
  96.        
  97. ?>
  98.  


теперь выдает такую ошибку: Fatal error: Call to a member function query() on a non-object in --- on line 84 (линия с ошибкой помечена в коде выше комментарием)
 
 Top
vanicon
Отправлено: 02 Июня, 2013 - 15:54:36
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 808
Дата рег-ции: Янв. 2010  
Откуда: Самара


Помог: 17 раз(а)




fiction
$DBH не определена
(Добавление)
Скорее всего там $this->DBH


-----
Так было, так есть и так будет
 
 Top
fiction
Отправлено: 02 Июня, 2013 - 15:58:33
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




vanicon пишет:
fiction
$DBH не определена
(Добавление)
Скорее всего там $this->DBH


Да, спасибо, заменил везде $DBH на $this->DBH заработало. Ошибку понял
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB