2016-02-17 3 views
3

Я пытаюсь создать корзину покупок с PHP, я хочу пройти через группу IDS и запросить базу данных для них. На данный момент я получаю эту ошибку:Создание корзины покупок с использованием PHP

Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''(1\', \'10\', \'6\', \'23)'' at line 1

Вот функция, я использую

function find_item_db($product_code) { 
try{ 
$query = substr($product_code, 0,-1); 
$product_codes = explode(",", $query); 
$ids = ''; 
foreach($product_codes as $code) { 
$params[] = $code; 
$ids .= '?, '; 
} 
$ids = '(' . rtrim($ids, ', ') . ')'; 
//we need to get product name and price from database. 
$sql = "SELECT * FROM `Sweets` WHERE `Sweet_ID` IN $ids"; 
$statement = $this->connection->prepare($sql); 
$statement->execute($params); 
return $result = $statement->fetchAll(); 
} 
catch(PDOException $e) 
{ 
    echo "Error: " . $e->getMessage(). "<br/>"; 
}  

} 

Может кто-нибудь увидеть, где я получаю синтаксическую ошибку здесь?

+0

Похоже, вы позволили magic_quotes, что так? Кавычки ускользают от того, что я вижу в сообщении об ошибке – JimmyBanks

ответ

2

Необходимо, чтобы каждое значение имело свой собственный заполнитель. Попробуйте:

$product_codes = explode(",", $query); 
$ids = ''; 
foreach($product_codes as $code) { 
    $params[] = $code; 
    $ids .= '?, '; 
} 
$ids = '(' . rtrim($ids, ', ') . ')'; 
//we need to get product name and price from database. 
$sql = "SELECT * FROM `Sweets` WHERE `Sweet_ID` IN $ids"; 
$statement = $this->connection->prepare($sql); 
$statement->execute($params); 

Примечание $ids это просто список заполнителей, фактические значения связаны в execute.

Грубый демо, как это работает: https://eval.in/520334

+0

. Вы на один шаг ближе к написанию своего собственного ОРМ в этот момент. Там очень много хороших, которые заслуживают рассмотрения, если вам нужно больше, чем базовые функции PDO. – tadman

+0

@ chris85 Спасибо, теперь это работает. Однако теперь я получаю дубликаты результата. Итак, 2 всего ...? –

+0

@AlexAnderson вы все еще используете 'PDO :: FETCH_ASSOC' и получаете дубликаты, или это ассоциативный и индексированный доход? – chris85

Смежные вопросы