Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Sign Up

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
Link to comment
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
Link to comment
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
Link to comment
Share on other sites


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

 

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

 

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

Link to comment
Share on other sites


Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

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.