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 :: Prepared statement

 PHP.SU

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


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

> Без описания
Kenshin
Отправлено: 27 Января, 2014 - 20:41:49
Post Id


Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Июль 2013  


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




Как использовать, создавать Prepared statement?
например у меня есть код:

PHP:
скопировать код в буфер обмена
  1.  
  2. $query = Database::query("SELECT `mail` FROM `userdata` WHERE `username`='$log_d' AND `password`='$p_md5'");
  3. $base = $query->fetch_object();
  4.                
  5.                 if ($mail_d == $base->mail && !empty($_POST['login']) && !empty($_POST['password']) && !empty($_POST['mail']))
  6.                 {...}
  7.  


Как это сделать через Prepared statement? Однако
 
 Top
OrmaJever
Отправлено: 27 Января, 2014 - 20:54:26
Post Id



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


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


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




PHP:
скопировать код в буфер обмена
  1. $p = $mysqli->prepare("SELECT `mail` FROM `userdata` WHERE `username`= ? AND `password`= ?");
  2. $p->bind_param('ss', $log_d, $p_md5);
  3. $p->execute();
  4. $stmt->bind_result($mail);
  5. while ($stmt->fetch()) {
  6.    echo $mail;
  7. }

Хотя лично я prepare использую только для insert/update, для селекта обычный query.
(Добавление)
А вот ссылка с примером
http://www.php.net/manual/ru/mys...i-stmt.fetch.php


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Kenshin
Отправлено: 27 Января, 2014 - 21:13:12
Post Id


Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Июль 2013  


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




не работает у меня так..... выдает ошибку:
Notice: Undefined variable: mysqli in.....
Fatal error: Call to a member function prepare() on a non-object in.....

ошибка в этой строке:
PHP:
скопировать код в буфер обмена
  1.         $p = $mysqli->prepare("SELECT `mail` FROM `userdata` WHERE `username`= ? AND `password`= ?");
  2.  
 
 Top
peters
Отправлено: 27 Января, 2014 - 21:35:14
Post Id


Гость


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


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




прочитайте про mysqli:
http://www.php.su/articles/?cat=...pdb&page=010


PHP:
скопировать код в буфер обмена
  1. $mysqli = new mysqli('localhost', 'user', 'password', 'world');
 
 Top
OrmaJever
Отправлено: 27 Января, 2014 - 21:54:12
Post Id



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


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


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




Kenshin я же блин не знаю что у вас за класс Database, я вам привёл общий пример использования, а под свой код уже сами подгоняйте


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Kenshin
Отправлено: 30 Января, 2014 - 19:32:47
Post Id


Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Июль 2013  


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




OrmaJever пишет:
Kenshin я же блин не знаю что у вас за класс Database, я вам привёл общий пример использования, а под свой код уже сами подгоняйте


Вот мой класс Database:
PHP:
скопировать код в буфер обмена
  1.  
  2.  require_once 'Db_log.php';
  3.  
  4. class Database //Klass fцr koppling till databas
  5. {
  6.     private static $instance;
  7.     private $MySQLi;
  8.        
  9.     private function __construct(array $dbOptions)  // Konstruktцr av klass
  10.         {
  11.         // Koppling till MySQL server
  12.                 $this->MySQLi = @ new mysqli($dbOptions['db_host'],
  13.                                      $dbOptions['db_user'],
  14.                                      $dbOptions['db_pass'],
  15.                                      $dbOptions['db_name']
  16.                                     );
  17.        
  18.         if(mysqli_connect_errno())// Undantag om ska vara problem under koppling till databas
  19.                 {
  20.             throw new Exception('Problem med koppling till Databas');
  21.         }
  22.              
  23.         $this->MySQLi->set_charset("utf8"); // Typ av kodning
  24.     }
  25.  
  26.     public static function getInstance(array $dbOptions) // Metod fцr ofarlig koppling
  27.         {
  28.         if(self::$instance instanceof self)
  29.                 {
  30.             return false;
  31.         }
  32.                
  33.         self::$instance = new self($dbOptions);
  34.     }
  35.  
  36.     public static function getMySQLiObject()
  37.         {
  38.         return self::$instance->MySQLi;
  39.     }
  40.  
  41.          
  42.     public static function query($q) // Frеga till databas
  43.         {
  44.         return self::$instance->MySQLi->query($q);
  45.     }
  46.  
  47.     public static function esc($str) // Skydd mot SQL Injection
  48.         {
  49.         return self::$instance->MySQLi->real_escape_string(htmlspecialchars($str));
  50.     }
  51. }
  52.        
  53. Database::getInstance($dbOptions); // Koppling
  54.  


Читал инструкции.... но так и не разобрался как решить проблему... Однако

(Отредактировано автором: 30 Января, 2014 - 19:46:25)

 
 Top
OrmaJever
Отправлено: 30 Января, 2014 - 20:09:23
Post Id



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


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


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




Kenshin пишет:
Вот мой класс Database:

выкинуть ваш класс и использовать чистый mysqli.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Kenshin
Отправлено: 30 Января, 2014 - 20:16:26
Post Id


Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Июль 2013  


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




OrmaJever пишет:
Kenshin пишет:
Вот мой класс Database:

выкинуть ваш класс и использовать чистый mysqli.


Чем класс плохой? Я его для MVC использовал
 
 Top
OrmaJever
Отправлено: 30 Января, 2014 - 20:23:35
Post Id



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


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


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




ну например тем что он высосан из пальца. Зачем делать класс для класса? В чём смысл вашего класса?


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Kenshin
Отправлено: 30 Января, 2014 - 20:48:11
Post Id


Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Июль 2013  


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




OrmaJever пишет:
ну например тем что он высосан из пальца. Зачем делать класс для класса? В чём смысл вашего класса?

Database класс отвечает за подключение к базе данных...
другой класс выполняет другие операции...
У меня была задача по концепции MVC сделать страницу с полем для логирования, с переходом на другую страницу, для тех пользователей кто есть в базе данных... как то так...
я только учусь, вот и иногда недопонимаю всей сути проблемы и как её решить
 
 Top
OrmaJever
Отправлено: 30 Января, 2014 - 22:05:56
Post Id



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


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


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




Kenshin пишет:
Database класс отвечает за подключение к базе данных...

Тоже самое делает класс стандартный класс mysqli. Вот здесь хорошее описание класса и его методов с примерами.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
caballero
Отправлено: 30 Января, 2014 - 22:38:24
Post Id


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


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


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




Цитата:
я только учусь, вот и иногда недопонимаю всей сути проблемы и как её решить

тогда зачем берешь высосаные из пальца задачи. какое отношение твой класс имеет к MVC


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Kenshin
Отправлено: 30 Января, 2014 - 23:01:49
Post Id


Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Июль 2013  


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




caballero пишет:
Цитата:
я только учусь, вот и иногда недопонимаю всей сути проблемы и как её решить

тогда зачем берешь высосаные из пальца задачи. какое отношение твой класс имеет к MVC


Это не я сам себе придумал задачу, а получил такое практическое задание...
 
 Top
OrmaJever
Отправлено: 30 Января, 2014 - 23:04:51
Post Id



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


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


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




Ладно, не будем вдаваться в подробности, но либо задание было глупое, либо вы его не так поняли, но скажу вам что ваш класс Database не нужен. В предыдущем посте я забыл ссылку вставить, вот она http://www.php.net/manual/ru/book.mysqli.php , прочитайте как работать с этим классом и за что отвечают какие методы (там не сложно), и используйте его.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Kenshin
Отправлено: 31 Января, 2014 - 11:23:51
Post Id


Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Июль 2013  


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




[quote=OrmaJever][/quote]

Не получается у меня разобраться....
Расскажу подробней что и как...
Есть класс Database, в нем Singleton pattern подключения к Mysql:

PHP:
скопировать код в буфер обмена
  1.  
  2. require_once 'Db_log.php';
  3.  
  4. class Database //Klass fцr koppling till databas
  5. {
  6.     private static $instance;
  7.     private $MySQLi;
  8.        
  9.     private function __construct(array $dbOptions)  // Konstruktцr av klass
  10.         {
  11.         // Koppling till MySQL server
  12.                 $this->MySQLi = @ new mysqli($dbOptions['db_host'],
  13.                                      $dbOptions['db_user'],
  14.                                      $dbOptions['db_pass'],
  15.                                      $dbOptions['db_name']
  16.                                     );
  17.        
  18.         if(mysqli_connect_errno())// Undantag om ska vara problem under koppling till databas
  19.                 {
  20.             throw new Exception('Problem med koppling till Databas');
  21.         }
  22.              
  23.         $this->MySQLi->set_charset("utf8"); // Typ av kodning
  24.     }
  25.  
  26.     public static function getInstance(array $dbOptions) // Metod fцr ofarlig koppling
  27.         {
  28.         if(self::$instance instanceof self)
  29.                 {
  30.             return false;
  31.         }
  32.                
  33.         self::$instance = new self($dbOptions);
  34.     }
  35.  
  36.     public static function getMySQLiObject()
  37.         {
  38.         return self::$instance->MySQLi;
  39.     }
  40.  
  41.          
  42.     public static function query($q) // Frеga till databas
  43.         {
  44.         return self::$instance->MySQLi->query($q);
  45.     }
  46.  
  47.     public static function esc($str) // Skydd mot SQL Injection
  48.         {
  49.         return self::$instance->MySQLi->real_escape_string(htmlspecialchars($str));
  50.     }
  51. }
  52.        
  53. Database::getInstance($dbOptions); // Koppling
  54.  


Другой класс выполняет операции с Mysql

PHP:
скопировать код в буфер обмена
  1.  
  2. class User  
  3. {
  4.  
  5.     public function readUser()
  6.     {
  7.     .........
  8.    
  9.     $query = Database::query("SELECT `mail` FROM `userdata` WHERE `username`='$log_d' AND `password`='$p_md5'");
  10.     $base = $query->fetch_object();
  11. .....
  12. }
  13.  

Как из этого всего, чтобы был singleton pattern сделать чтобы было с prepared statement?
Если можете подскажите, но не кидайте ссылки... начитался но так и не разобрался...
Однако
Мне именно надо такой вариант чтобы был Singletone pattern в одном классе... а операции с базой данных с prepared statement в другом классе..
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Администрирование БД »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB