Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: DbSimple вопросики в базе.
 
 автор: Qwestxf   (11.05.2009 в 21:04)   письмо автору
 
 

Я не знал куда разместить эту тему, решил постить в PHP.

Написал грабер для DLE, но по не опытности не смог полностью завернуть кавычки в Html,
и по этой причине решил использовать DbSimple.

Но в базе вместо русских букв оказались вопросики ????????????????????

require_once "DbSimple/Generic.php";

// Устанавливаем соединение.
$DB = DbSimple_Generic::connect("mysql://Логин:Пароль@Хост/База");

// Вот так выглядит запрос

$date = date("Y-m-d H:i:s");
$translit =  GotoTranslit($nazvanie);
 $DB->query('INSERT INTO `dke_post` (`id`,
  `autor`,
  `date`,
  `short_story`,
  `full_story`,
  `xfields`,
  `title`,
  `descr`,
  `keywords`,
  `category`,
  `alt_name`,
  `comm_num`,
  `allow_comm`,
  `allow_main`,
  `allow_rate`,
  `approve`,
  `fixed`,
  `rating`,
  `allow_br`,
  `vote_num`,
  `news_read`,
  `votes`,
  `access`,
  `symbol`,
  `flag`,
  `editdate`,
  `editor`,
  `reason`,
  `view_edit`,
  `tags`,
  `metatitle`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)',
 NULL, 'dll', $date, $krat, $full, '', $nazvanie, '', '', $categor, $translit, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, '', '', 1, '', '', '', 0, '', '');


Пробовал отдельно выносить перемеренные, и руками задавать им значение всё равно вопросики.
$krat,$full - содержит Html

В чём может быть проблема?

  Ответить  
 
 автор: admiral   (11.05.2009 в 21:16)   письмо автору
 
   для: Qwestxf   (11.05.2009 в 21:04)
 

А какая кодирофка?
После
require_once "DbSimple/Generic.php";

пропишите mysql_query("SET NAMES 'cp1251'");
Это если windows-1251, если утф, то utf-8 попробуйте

  Ответить  
 
 автор: Qwestxf   (11.05.2009 в 21:27)   письмо автору
 
   для: admiral   (11.05.2009 в 21:16)
 

Спасибо заработало.
Изначально я подключался в db вот так.


<?php
# FileName="Connection_php_mysql.htm"
# Type="MYSQL"
# HTTP="true"
$hostname_secrets "localhost";
$database_secrets "";
$username_secrets "";
$password_secrets "";
$secrets mysql_pconnect($hostname_secrets$username_secrets$password_secrets) or trigger_error(mysql_error(),E_USER_ERROR);
mysql_select_db ($database_secrets);
mysql_query("set names cp1251");

global 
$_CONFIG;
$_CONFIG["db"] = "mysql://".$username_secrets.":".$password_secrets."@localhost/".$database_secrets;
require(
"Generic.php");
$DB DbSimple_Generic::connect($_CONFIG["db"]);

?>


Были вопросики, в чём разница понять не могу?

  Ответить  
 
 автор: Axxil   (18.05.2009 в 12:44)   письмо автору
 
   для: Qwestxf   (11.05.2009 в 21:27)
 

Разница в том, что вы сначала открываете одно соединение с БД, а потом его перебиваете другим. Зачем это делать абсолютно неясно.

  Ответить  
 
 автор: Axxil   (18.05.2009 в 12:42)   письмо автору
 
   для: Qwestxf   (11.05.2009 в 21:04)
 

У вас данные для вставки из формы приходят?

Если та, то такой запрос довольно нелогичен. Лучше воспользоваться плейсхолдерами массивов. Т.е. вставку делать:

$DB->query('INSERT INTO `dke_post` SET ?a',$data);


Где массив $data - массив с данными, приходящими от формы (почищенный $_POST)

Для удобства можно называть поля формы так же как соответствующие поля таблицы в БД и автоматически чистить приходящий $_POST массив сравнивая его ключи с результатом работы функции mysql_list_fields() или запроса SHOW COLUMNS

Тогда вставка будет совсем простой:

$data = $DB->prepareData('dke_post',$_POST);
$DB->query('INSERT INTO `dke_post` SET ?a',$data);


PS метод prepareData надо написать самому. Что-то типа:

 
<?
    
function prepareData($table,$data){
      
$list $this->select('SHOW COLUMNS FROM ?t',$table);
      
$ret = array();
      foreach(
$list as $k=>$item){
        
$fname $item['Field'];
        if(
in_array($fname,array_keys($data))) $ret[$fname] = $data[$fname];
      }
      return 
$ret;
    }
?>

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования