我正在使用它来获取用户输入并清理代码。我试图解决这个问题,然后代码停止工作。
这有效:
$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为字符串,数组在
中给出
答案 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);