2015-09-11 4 views
-1

Solved: Причина Can I parameterize the table name in a prepared statement?PHP MySQL Query не обеспечивает многомерный массив

У меня есть очень простой запрос, чтобы собрать данные из таблицы в два столбца в MySQL. Обычно он работал, но по какой-то причине, я знаю, получаю ошибку: Undefined смещение: 1

$query_select = ("SELECT ?, ? FROM _HOOFDRUBRIEK"); 
$stmt = $mysqli->prepare($query_select); 
$stmt->bind_param("ss", $column1, $column2); 
$stmt->execute(); 
$stmt->store_result(); 
//$count = $stmt->num_rows; 
//echo $count; 
/die(); 

$stmt->bind_result($key_hoofdrubriek   , 
        $descr_hoofdrubriek  ); 

$stmt->fetch();   

$hoofdrubriek[] = array('key'  =>$key_hoofdrubriek ,       
         'descr' =>$descr_hoofdrubriek ); 

//Here I request the variable, what occurs the error 
$var = $hoofdrubriek[1]['descr']; 


echo 'Show here what's in the var: '.$var ; 

Кто-нибудь знает, почему я получаю эту ошибку, потому что с моей точки зрения, многомерный массив можно назвать по $ array_name [ строка столбец];

+0

Все массив начинается с индексом 0. – aldrin27

+0

Да, я знаю, но и когда я вхожу в $ hoofdrubriek [0] ['descr']; Я получаю такую ​​же ошибку. По моему мнению, полная таблица теперь находится в массиве, поэтому я могу выбрать ROW с соответствующими данными? –

+0

'print_r ($ hoofdrubriek);' – aldrin27

ответ

1

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

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

SELECT 'key_hoofdrubriek', 'descr_hoofdrubriek' FROM FROM RGS_HOOFDRUBRIEK 

Таким образом, пропустить знаки вопроса и параметры ввода связывания полностью и построить запрос следующим образом:

$query_select = ("SELECT key_hoofdrubriek, descr_hoofdrubriek FROM RGS_HOOFDRUBRIEK"); 

Или, если вы должны, используя PHP переменные в операторе:

$query_select = ("SELECT $column1, $column2 FROM RGS_HOOFDRUBRIEK"); 

Для чтения, вы можете, конечно, до сих пор используют bind_result.

+0

Я знаю, посмотрю мое обновление.Я пропустил переменные имен столбцов в своем фрагменте. $ column1 = 'key_hoofdrubriek'; $ column2 = 'descr_hoofdrubriek'; -> см. это сообщение: http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php?rq=1 –

+0

Я предполагал, что они пропали без вести. Дело в том, что это не работает. Вы не можете передавать имена столбцов в качестве входных параметров. – GolezTrol

+0

Вы в замешательстве. Имя VAR равно @ COLUMN1, но это просто переменная, которая задана для имени столбца. –

0

Вы не можете использовать заполнители для имен столбцов, они всегда рассматриваются как выражения. Таким образом, ваш подготовленный запрос эквивалентен запись:

SELECT 'key_hoofdrubriek', 'descr_hoofdrubriek' FROM RGS_HOOFDRUBIEK 

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

Если вам необходимо определить имена столбцов динамически, вы должны использовать переменную замену или конкатенацию, вы не можете использовать заполнители:

$query_select = "SELECT $column1, $column2 FROM RGS_HOOFDRUBRIEK"; 
+0

Я этого не делаю. Я знаю, что это выглядит странно, но я использую VAR с именем $ column1 ut ists, установленным для имени столбца: 'key_hoofdrubriek'; –

+0

@Krooy_mans Я обновил свой ответ, чтобы соответствовать всем вашим именам и значениям переменных, я надеюсь, что это более понятно. – Barmar

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