是什么让这两个阵列增加了不同?

时间:2014-05-08 16:56:16

标签: php arrays

我正在使用它来获取用户输入并清理代码。我试图解决这个问题,然后代码停止工作。

这有效:

    $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为字符串,数组在

中给出

6 个答案:

答案 0 :(得分:2)

要了解您的错误消息,我认为需要对数组进行一些解释。

如果你使用像$bindVars[]这样的括号,你不需要通过调用array()函数来说它是一个数组。

PHP将括号[]理解为数组声明。


使用括号[] array()函数

的声明
$BindVars[] = array($Email,$pass); 

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

$bindVars内创建一个新的数组,其中包含元素$Email& $pass

因此,由于括号$bindVars[]已经是一个数组。这给了我们一个多维数组

在您的代码中,它是一个二维数组,代表一个表。它是最常用的多维数组。

3维数组,如$bindVars[][][](3对括号)代表立方体或骰子。

4-Dimenisional Array $bindVars[][][][](4对括号)就是一个立方体,每一面都有另一个维度。 ---随着每一个进一步的维度,它变得更加令人难以置信---

返回二维数组

1。维度是行或记录

2。维度是列或字段。

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

警告:mysqli :: real_escape_string()需要参数1   string,array给出......

/* --- 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);

答案 1 :(得分:2)

$BindVar[] = $Email;
$BindVar[] = $pass;

这是一个包含 2 字符串元素的数组。

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

这是一个 1 数组元素包含 2 字符串元素的数组

两者都不同,应该以不同的方式处理。第一个是简单数组,第二个是多维数组。

哦,我忘了你的

$BindVar[] = array();

这将导致意外行为,这实际上会向您的$BindVar数组添加一个空数组元素。从它的外观来看,我认为你只想将$ BindVar声明为数组,执行此操作

$BindVar = array();

答案 2 :(得分:1)

[]用于向数组追加新项目。 $BindVar[] = array(...)在第一个数组的该项中放入另一个数组。这就是为什么在该项上运行real_escape_string失败,因为该项不是字符串而是嵌套数组。

答案 3 :(得分:1)

代码如何构造数组的伪表示法:

首先:

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

$BindVar
(
    Array(),
    Email,
    Pass
)

第二

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

$BindVar
(
    Array(Email, Pass)
)

这两者显然不同。

答案 4 :(得分:1)

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

如果在此之前未定义$bindvar,您将创建一个新数组,然后将空数组推入其中。这使得$BindVar[0]成为一个数组,当你为它进行绑定操作时,你将把新的空数组传递给bind调用。因此你的错误。

你可能只想:

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

答案 5 :(得分:0)

你可以改变你的喜欢

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