oop — PHP PDO bindValue () без явного типа данных

Я работаю над приложением, использующим объект PHP, ориентированный на PDO. Я часами пытался найти причину сбоя при выполнении моего запроса. Оказалось, что я поставил значение в качестве параметра в формате String для привязки в массиве. У меня есть общий цикл, который связывает все параметры с заполнителем вопросительного знака для моего запроса. Это, конечно, будет учитывать параметры в формате String. Однако у меня есть столбцы в целочисленном формате. Даже когда я приведу переменную к целому числу, используя (int) или же intval(), это не работает. Так что я считаю, что я должен указать явный тип данных PDO::PDO_PARAM_INT , Но у меня есть код примерно так для всех запросов:

Пример запроса:

$this->db->query("INSERT INTO users (name, numberOfCar") VALUES (?,?) ,
array('Jake', 5));

Часть bindValue ():

$x = 1;
if( count($params) ){
foreach($params as $param){
$this->_query->bindValue($x, $param);
$x++;
}
}

Как мне пойти с этим? Я имею в виду любую идею, как я могу изменить код для решения этой проблемы? Не уверен, должен ли я изменять какую часть кода, но я озадачен, чтобы обойти это. Заранее спасибо.

РЕДАКТИРОВАТЬ: PHP версии 5.3.10, PDO подключиться к Sybase

0

Решение

Я не могу воспроизвести проблему, используя php 5.6.3, mysql5.6, win32

<?php
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
setup($pdo);

$stmt = $pdo->prepare("INSERT INTO soFoo_users (name, numberOfCar) VALUES (?,?)");
foreach( array('Jake', 5) as $i=>$v) {
$stmt->bindValue($i+1,  $v);
}
$stmt->execute();
$stmt = null;

foreach($pdo->query('SELECT * FROM soFoo_users', PDO::FETCH_ASSOC) as $r ) {
echo join(', ', $r), "\r\n";
}

function setup($pdo) {
$pdo->exec('
CREATE TEMPORARY TABLE soFoo_users (
name varchar(32),
numberOfCar int
)
');
}

печать

Jake, 5

как и ожидалось

0

Другие решения

Кажется, мне все еще нужно указать явный тип данных. Поэтому я придумаю собственное решение. Вот как я это сделал:

$this->db->query("INSERT INTO users (name, numberOfCar") VALUES (?,?) ,
array('Jake', 5),
array(PDO::PARAM_STR, PDO::PARAM_INT));

Для привязки значения:

$x = 1;
if( count($params) ){
foreach($params as $param){
$this->_query->bindValue($x, $param, $datatypes[$x-1]);
$x++;
}
}

Я надеюсь, что это может помочь кому-то, если у кого-то есть такая проблема. Большое спасибо тем, кто помог мне в этом.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector