Что делает эти два массива разными?

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

Это работает:

$BindVar[] = array(); $BindVar[] = $Email; $BindVar[] = $pass; 

Однако это не так:

  $BindVar[] = array($Email,$pass); 

Вот код, который ломается, когда я меняю эту строку:

 foreach ($BindVars as $value) { $input[] = "'" . $mysqli->real_escape_string($value) . "'"; // cleaning the input } 

Он дает эту ошибку:

Предупреждение: mysqli :: real_escape_string () ожидает, что параметр 1 будет строкой, массив указан в

Related of "Что делает эти два массива разными?"

Чтобы понять ваше сообщение об ошибке, я думаю, ему нужно некоторое объяснение в отношении массивов.

Если вы используете скобки типа $bindVars[] , вам не нужно говорить, что это массив, вызывая функцию array() .

PHP понимает скобки [] как объявление массива.


Ваши объявления с помощью скобок [] и функция array()

 $BindVars[] = array($Email,$pass); // same as: $BindVars = array( array($Email, $pass); ); 

создает новый массив внутри $bindVars содержащий элементы $Email & $pass .

Таким образом, $bindVars уже является массивом из-за скобок [] . Это дает нам многомерный массив .

В вашем коде это 2-мерный массив, который представляет собой таблицу . Это наиболее часто используемый многомерный массив.

3-мерный массив, такой как $bindVars[][][] (3 пары скобок) представляет собой куб или матрицу.

4-Dimenisional Array $bindVars[][][][] (4 пары скобок) – это куб с другим измерением на каждой его стороне. — С каждым дальнейшим Измерением он становится более ошеломляющим –

Вернемся к 2-мерному массиву :

1. Размер – это строка или запись

2. Размер – это столбец или поле.

 // 1. Dimension: 1. row echo $bindVars[0]; // Output: Array() Here is your mysqli error coming from! 

Предупреждение: mysqli :: real_escape_string () ожидает, что параметр 1 будет строкой, массив задан …

 /* --- 1. Record/Row --- */ // 2. Dimension: 1. row, 1. column echo $bindVars[0][0]; // Output: value of $Email // 2. Dimension: 1. row, 2. column echo $bindVars[0][1]; // Output: value of $pass /* --- 2. Record/Row --- */ // 1. column echo $bindVars[1][0]; // Output: value of $Email // 2. column echo $bindVars[1][1]; // Output: value of $pass // And so on 

+ Изменить

 $BindVar[] = array($Email,$pass); 

в

 $BindVar = array($Email,$pass); 
 $BindVar[] = $Email; $BindVar[] = $pass; 

Это массив с 2 строковыми элементами.

 $BindVar[] = array($Email,$pass); 

Это массив с 1 элементом массива, содержащим 2 строковых элемента

Оба они разные, и их следует рассматривать по-разному. Первый – это простой массив, а второй – многомерный массив.

И о, я забыл о твоих

 $BindVar[] = array(); 

Это приведет к неожиданному поведению. Это фактически добавляет пустой массив в ваш массив $BindVar . По внешнему виду, я думаю, вы просто хотите объявить, что $ BindVar как массив, сделайте это

 $BindVar = array(); 

[] предназначены для добавления нового элемента в массив. $BindVar[] = array(...) помещает другой массив в этот элемент первого массива. Вот почему выполнение real_escape_string в этом элементе не выполняется, потому что этот элемент не является строкой, а вложенным массивом.

Псевдоопределение того, как ваш код структурирует массив:

Первый:

 $BindVar[] = array(); $BindVar[] = $Email; $BindVar[] = $pass; $BindVar ( Array(), Email, Pass ) 

Во-вторых:

 $BindVar[] = array($Email,$pass); $BindVar ( Array(Email, Pass) ) 

Эти два явно отличаются друг от друга.

 $BindVar[] = array(); ^^^^^^^^^^---- push a new array into $BindVar 

Если $bindvar был определен до этого, вы будете создавать новый массив и затем вставлять в него пустой массив. Это $BindVar[0] что $BindVar[0] является массивом, и когда вы перебираете его для операции привязки, вы будете передавать этот новый пустой массив на вызов bind. следовательно, ваша ошибка.

Вы, вероятно, хотите просто:

 $BindVar = array(); ^--- no [] 

U может изменить ваш, как ниже

$BindVar[] = array($Email,$pass); до $BindVar = array($Email,$pass);