Jump to content

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 или это я ее неправильно вызываю?

Edited by PeletonTver

Share this post


Link to post
Share on other sites

Онож с коробки вроде с  PDO не работает

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites

Здорово! А зачем тогда выбор из драйверов при установке?

 

// DB
define('DB_DRIVER', 'mpdo');
Edited by PeletonTver

Share this post


Link to post
Share on other sites

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

делаю запрос

$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');

 

 

 

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

 

Edited by PeletonTver

Share this post


Link to post
Share on other sites

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

В родном 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 так не получится запускать

 

 

Edited by PeletonTver

Share this post


Link to post
Share on other sites

перемудрил, вот так надо

public function query($sql,$parametrs=array()) {
   return $this->adaptor->query($sql,$parametrs);
}

Share this post


Link to post
Share on other sites

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

$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 не нужен свой? Гуглил-гуглил , не нагуглил((

 

Share this post


Link to post
Share on other sites

сделал для теста 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 не видит файл лежащий в одной папке.

 

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.