2013-11-26 3 views
0

Я пытаюсь переписать все мои стандартные запросы MySQLi в подготовленные заявления MySQLi.Параметр в подготовленном заявлении содержит Hyphen (-)?

Я заметил проблему, хотя всякий раз, когда у меня есть переменная, содержащая дефис, выполняется выполнение().

Переменные, с которыми я имею дело ($ project_id), выглядят следующим образом: 'AAD0012003-01'.

$get_progress_done = $db->prepare("SELECT COUNT(*) as rows FROM testvoorstage_checklists.?"); 
     $get_progress_done->bind_param("s", $project_id); 
     $get_progress_done->execute(); 
     $get_progress_done->store_result(); 
     $get_progress_done->bind_result($rows); 

     while($get_progress_done->fetch()) {    
      echo $rows; 
     } 

Я искал решение в течение нескольких дней, и я до сих пор не нашел способ «убежать» дефис в переменном.

Я знаю, что запросы работают, потому что я пробовал их в PHPMyAdmin с заданной переменной, и они там работают нормально.

Я изучаю подготовленные высказывания, и я хотел бы знать, как это исправить, потому что у меня довольно много переменных, содержащих специальные символы.

Ошибка я получаю:

вызов функции члена bind_param() на не-объект

+0

1. Проверьте ошибки 2. Вы можете привязывать значения, а не имена объектов базы данных – zerkms

+0

Возможный дубликат [Могу ли я параметризовать имя таблицы в подготовленном отчете?] (Http://stackoverflow.com/questions/11312737/ can-i-parameterize-the-table-name-in-a-made-statement) –

+0

Спасибо за ваши ответы. Ну ладно, я так и думал. Однако во всех других утверждениях, где я использую одну и ту же переменную, чтобы получить как определенную строку из таблицы, она также не работает. Есть ли способ избежать переменной? Потому что, когда я пытаюсь выполнить запрос в PHPMyAdmin и вставляю 'AAD0012003-01' (с обратными выводами) непосредственно в запрос, он работает просто отлично. Единственная проблема - «-». –

ответ

0
  1. Ваша проблема не имеет ничего общего с дефисом или подготовленных заявлений ,
  2. Настоящая проблема - ваш дизайн . Вместо отдельной таблицы для каждого проекта вам нужно сохранить все проекты в одной таблице.
  3. Просьба указать ваши переменные разумно. То, что $db->prepare возвращает, никоим образом не является $get_progress_done - это просто заявление mysqli.

Таким образом, этот код будет делать

$sql = "SELECT COUNT(*) as rows FROM projects where project_id = ?"; 
$stmt = $db->prepare($sql); 
$stmt->bind_param("s", $project_id); 
$stmt->execute(); 
$stmt->bind_result($rows); 
$stmt->fetch(); 
echo $rows; 

Однако, я никогда в жизни не понимаю PHP пользователей, пишущих 7 строк кода, где только один достаточно.

+0

Спасибо, я попробую! :) –

+0

Я думал о моем проекте Database Design, но я понятия не имею, как хранить все проекты в одной таблице. Я определенно не эксперт по базам данных. Должен ли я создавать несколько таблиц для хранения значений из проекта? Как одна таблица для всех «отделов проектов», другая для «компонентов» и т. Д.? А затем создайте одну таблицу, где я объединился, как все данные из других таблиц вместе? –

+0

Вам лучше задать другой вопрос. Существует множество экспертов по базам данных. –