Php 准备好的陈述很奇怪
我的代码:Php 准备好的陈述很奇怪,php,mysql,prepared-statement,Php,Mysql,Prepared Statement,我的代码: public function select($tbl,$info,$cond = null) { if (!is_array($info)) { return false; } $query = "SELECT `" . implode("`,`", $info) . "` FROM " . $this->escapeString($tbl) . (is_null($cond) ? "" : " WHER
public function select($tbl,$info,$cond = null) {
if (!is_array($info)) {
return false;
}
$query = "SELECT `" . implode("`,`", $info) . "` FROM " . $this->escapeString($tbl) . (is_null($cond) ? "" : " WHERE " . $this->generateConditions($cond));
$query = $this->escapeString($query);
if ($prep = mysqli_prepare($this->connection,$query)) {
$types = "";
if (!is_null($cond)) {
$types = $this->generateTypes($cond,$types);
}
$params = array();
array_push($params, $prep);
array_push($params, $types);
if (!is_null($cond)) {
foreach ($cond as $key => $value) {
array_push($params, $value);
}
}
if (call_user_func_array("mysqli_stmt_bind_param", $this->refValues($params))) {
mysqli_stmt_execute($prep);
$results = array();
$results[] = $prep;
$row = new stdClass();
foreach ($info as $key => $value) {
$results[] = &$row->$value;
}
if (call_user_func_array("mysqli_stmt_bind_result", $results)) {
$resultArray = array();
while (mysqli_stmt_fetch($prep)) {
error_log("[PROJECT] ROW: " . print_r($row,true));
array_push($resultArray, $row);
}
error_log("[PROJECT] TEST: " . print_r($resultArray,true));
mysqli_stmt_close($prep);
unset($prep);
return (count($resultArray) == 1) ? $resultArray[0] : (array)$resultArray;
}
mysqli_stmt_close($prep);
unset($prep);
return false;
}
}
return false;
}
这是我从数据库中选择内容的php方法。但是,似乎存在一个bug:
$resultArray = array();
while (mysqli_stmt_fetch($prep)) {
error_log("[PROJECT] ROW: " . print_r($row,true));
array_push($resultArray, $row);
}
error_log("[PROJECT] Array: " . print_r($resultArray,true));
你会认为无论这些$row
是在数组中找到的,对吗?
这是输出(由于日志太长,我提出了一个概念):
因此,虽然行不同,但数组中只显示一行,并且该行是重复的。有人对此有解释吗?根本不是一个奇怪的错误
$results[]=\uuuu&\uuuu$row->$value代码>指定“按引用”是只有在了解其工作原理时才应该执行的操作。我有1个对象,$row,并且在获取请求期间设置了其属性,然后我将其添加到数组中,其属性将更改。问题是,数组中的属性也在更改。我需要复制或克隆对象,使其属性不可触及。
ROW: stdClass Object\n(\n [token] => RUMtN0tWNDU3MDY3QjE0NDM4M1M=\n...
ROW: stdClass Object\n(\n [token] => RUMtNU1DNjcwNjYxNTQyNjIxNTc=\n...
Array: stdClass Object\n(\n [token] => RUMtN0tWNDU3MDY3QjE0NDM4M1M=\n,
stdClass Object\n(\n [token] => RUMtN0tWNDU3MDY3QjE0NDM4M1M=\n