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 :: помогите с PDO

 PHP.SU

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


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

> Без описания
imper
Отправлено: 29 Ноября, 2012 - 15:21:57
Post Id



Частый гость


Покинул форум
Сообщений всего: 134
Дата рег-ции: Февр. 2012  
Откуда: Тольятти


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

[+]


Добрый вечер, помогите пожалуйста, был класс

PHP:
скопировать код в буфер обмена
  1. Class DB {
  2.        
  3.   function ms_connect()
  4.     {
  5.         $query = mysql_connect($this->db_host, $this->db_user, $this->db_pass);
  6.         mysql_select_db($this->db_name);
  7.         return true;
  8.     }
  9.  
  10.     //метод добавления инфы в базу
  11.     function insert_db($data,$table)
  12.     {  
  13.         $str = implode("','",$data);
  14.         //$str = explode(",",$str);
  15.         $query = "INSERT INTO $table VALUES ('$str')";
  16.         $result = mysql_query($query);
  17.         if($result)
  18.         return true;
  19.         else mysql_error();
  20.     }
  21.  
  22. /*и остальные методы*/
  23. }
  24.  



короче все остальные классы были написаны основываясь на этом, но тут я обнаружил что после всех моих трудов над безопасностью,(детальная обработка всех переменных)
всё равно есть дырки, короче при закрытии одной появляется другая и всего не предусмотришь, так как одна голова, я решил использовать PDO

с Английским туго но в мануале примеры просмотрел


как мне переделать этот класс и этот метод под PDO?

и в чём ошибка здесь?

PHP:
скопировать код в буфер обмена
  1. Class DB {
  2.        
  3.   function ms_connect()
  4.     {
  5.         $query = mysql_connect($this->db_host, $this->db_user, $this->db_pass);
  6.         mysql_select_db($this->db_name);
  7.         return true;
  8.     }
  9.  
  10.     //метод добавления инфы в базу
  11.       function insert_db($data,$table)
  12.     {  
  13.         $db_pdo = new PDO("mysql:host=$db_host;dbname=$db_name", 'ххх', 'ххх');
  14.         $str = implode("','",$data);
  15.         //$str = explode(",",$str);
  16.             $data_update = array();
  17.             $data_data = array();
  18.             foreach($data as $column=>$value)
  19.        {
  20.          $data_update[] = "$column";// массив для запроса в базу, колонки
  21.          $data_data[] = ":$column";// массив для запроса в базу, сами данные
  22.          
  23.        }
  24.               $columns = implode("','",$data_update);  
  25.               $column_value = implode("','",$data_data);
  26.           $sql = "INSERT INTO $table ('$columns') VALUE ('$column_value')";
  27.         $sth = $db_pdo->prepare($sql);
  28.         //echo $sth->execute($data);
  29.         if ($sth->execute($data)){
  30.             echo "всё ровно";
  31.         }
  32.         else{
  33.             echo "хрен";
  34.         }
  35.        
  36.     }
  37.  
  38. /*и остальные методы*/
  39. }
  40.  


вот так обращаюсь

require_once('includes/classes/DB.class.php');
$db = new DB();
$db->ms_connect();
$data=array("id_post"=>"NULL","name_doc"=>"111","like_post"=>"222","de_like_post"=>"333");
$db->insert_db($data,'like_iv');


помогите найти ошибку или подскажите где есть литература на русском про функции PDO


-----
Самое лучшее решение проблемы
самое простое
 
 Top
EuGen Администратор
Отправлено: 29 Ноября, 2012 - 15:24:11
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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






-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
imper
Отправлено: 29 Ноября, 2012 - 15:25:58
Post Id



Частый гость


Покинул форум
Сообщений всего: 134
Дата рег-ции: Февр. 2012  
Откуда: Тольятти


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

[+]


блин, там на русском только до PDO::__construct
ждать когда переведут? Радость
(Добавление)
Окей, как нибудь на 99,9% можно обезопаситься от sql инъекций?
без PDO


-----
Самое лучшее решение проблемы
самое простое
 
 Top
EuGen Администратор
Отправлено: 29 Ноября, 2012 - 15:38:56
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




imper
Почитайте статью по второй ссылке. Ссылка на мануал приведена для порядка (именно там всегда первоисточник). В статье рассказаны все базовые принципы.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
imper
Отправлено: 29 Ноября, 2012 - 15:45:41
Post Id



Частый гость


Покинул форум
Сообщений всего: 134
Дата рег-ции: Февр. 2012  
Откуда: Тольятти


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

[+]


EuGen пишет:
imper
Почитайте статью по второй ссылке. Ссылка на мануал приведена для порядка (именно там всегда первоисточник). В статье рассказаны все базовые принципы.


я как раз по этой статье и писал метод, простые примеры получаются, а вот чуть сложней в sql запрос засуну то всё, сразу ничего не отправляется(


-----
Самое лучшее решение проблемы
самое простое
 
 Top
Bio man
Отправлено: 29 Ноября, 2012 - 15:57:28
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


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




imper пишет:
Окей, как нибудь на 99,9% можно обезопаситься от sql инъекций?
без PDO
Определись с пдо или без?
От иньекций спасает prepared statements, например,
PHP:
скопировать код в буфер обмена
  1. $stmt = $rPDO->prepare($sql);
  2. $stmt->bindParam($var);
  3. $stmt->execute();

(Добавление)
И учи лучше английский чем пхп. Или параллельно.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB