Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Recommended Posts

Здравствуйте. При инсталяции , выбираю PDO. В php.ini все подключено. При выполнении простых селектов все работает норм, а при желании запустить prepare, выводится ошибка непонимания.

 

/*работает*/
$sql="select * from table where a=".$a;
$query = $this->db->query($sql);
$result=$query->row;

/*выдает ошибку*/
$sql="select * from table where =?";
$prepare=$this->db->prepare($sql);

 

Если создаю вручную коннект  и его использую, всё нормально.

 

/*так работает*/

$dsn = "mysql:host=" . DB_HOSTNAME . ";dbname=" . DB_DATABASE . ";charset=UTF8";

$opt = [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES => false,
    PDO::MYSQL_ATTR_LOCAL_INFILE => true,
    PDO::ATTR_PERSISTENT => true
];
try {

    $conn = new PDO($dsn, DB_USERNAME, DB_PASSWORD, $opt);
} catch (PDOException $e) {
    echo "Error: " . $e->getMessage()."<br>";
   
}

 

$prepare=$conn->prepare($sql);

 

 

 

Вопрос:$this->db как то можно заставить работать с PDO prepare или это я ее неправильно вызываю?

Змінено користувачем PeletonTver
Надіслати
Поділитися на інших сайтах


Возможно будет в помоСТЧ:

 

Надіслати
Поділитися на інших сайтах

Он есть! только почему то не работает)).

делаю запрос

$sql="select * from plitka.oc_product where Price > :price Limit 1";
$params=array(1=>array(':price'=>100));
$row=$this->db->query($sql,$params);

 

В system->library->db->mpdo.php в функции query параметры не передаются ,если вставляю вручную работает.

 

public function query($sql, $params = array()) {

      // $params=array(':price'=>'100');

 

 

 

Как починить?

 

Змінено користувачем PeletonTver
Надіслати
Поділитися на інших сайтах


Вообщем накостылил так.

В родном db.php 

public function query($sql) {
   return $this->adaptor->query($sql);
}

параметры как бы вообще не предусмотрены, поэтому они и теряются.

 

чуть поменяем

public function query($sql,$parametrs=array()) {
     if($parametrs) return $this->adaptor->query($sql,$parametrs);
     else return $this->adaptor->query($sql);
}
И вызываю 
$sql="select * from plitka.oc_product where Price > ? Limit 1";
 $row=$this->db->query($sql,[1000]);

 

Усё работает)).

 

По уму то надо все запросы с параметрами переписывать.

 

Только вот отдельно prepare и execute так не получится запускать

 

 

Змінено користувачем PeletonTver
Надіслати
Поділитися на інших сайтах


  • 2 months later...

Может кто сталкивался ? 

$dsn="mysql:host=localhost;dbname=baza;charset=UTF8";;
$conn=new PDO($dsn, 'root','root');

Если запускаю из под php.exe и php-win.exe то все ок,подключается к базе.

Если php-cgi.exe то не видит драйвер.

// Is PDO installed?
if (!defined('PDO::ATTR_DRIVER_NAME')) {
    echo 'PDO is unavailable<br/>';
}
elseif (defined('PDO::ATTR_DRIVER_NAME')) {
    echo 'PDO is available<br/>';
}

 

PDO видит.

print_r(PDO::getAvailableDrivers());

а драйвер не видит.

Для cgi php.ini не нужен свой? Гуглил-гуглил , не нагуглил((

 

Надіслати
Поділитися на інших сайтах


сделал для теста 3 файла однострочных в одной папке.

test.php <?php print_r(PDO::getAvailableDrivers());

test.cmd  php test.php    

test1.cmd  php-cgi test.php

 

на IIS работают оба теста

 

на Xampp только первый

Status:404 Not Found

No input file specified. 

 

cgi не видит файл лежащий в одной папке.

 

Помогите плз.

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.