数据库表“system”中有两列。我有systemId
并希望得到mobileSystemId
。但是我已经定义为全局的变量$mobileSystemId
总是空的。
编辑:现在array_map不起作用。我总是得到我的异常输出“Arrayfehler ArrayMap” 我有以下代码:
$mobileSystemIds=array();
function getMobileSystemId($systemId)
{
global $mysqli;
global $mobileSystemIds;
$query="SELECT mobileSystemId FROM system WHERE systemId ='" .$systemId ."'";
if(!$result=$mysqli->query($query))
{
echo "Datenbankfehler DB-QUery";
exit(0);
}
if (!$mobileSystemId=$result->fetch_assoc())
{
echo "Datenbankfehler DB-Fetch";
exit(0);
}
$mobileSystemId=$mobileSystemId["mobileSystemId"];
echo "mobile System ID: " .$mobileSystemId ."<br />";
return $mobileSystemId;
}
if(!$mobileSystemIds=array_map("getMobileSystemId",$systemList))
{
echo "Arrayfehler ArrayMap";
}
答案 0 :(得分:0)
在这种情况下,在函数中使用return
会更加清晰。
与您的问题无关,但您的$systemId
var是否受信任? (防止SQL注入)。
答案 1 :(得分:0)
更新
if(!$mobileSystemIds=array_map("getMobileSystemId",$systemList))
{
echo "Arrayfehler ArrayMap";
}
应该阅读(刚检查过;它对我有用):
$mobileSystemIds = array_map('getMobileSystemId', $systemsList);
if (empty($mobileSystemIds))
{
if (empty($systemsList) || !(is_array($systemsList)))
echo "OK: no mobile IDs, but no systems either";
else
echo "THIS now is strange :-(";
}
else
{
echo "Alles OK";
var_dump($mobileSystemIds);
}
我通过根据输入返回一个虚拟值来尝试这个;如果它不适合你,那么数据库中肯定会有一些奇怪的东西。
(更新:下面的文字是指你的原始代码,它没有使用数组映射)
您的代码应该按原样运行。您将多个$mobileSystemId
放入一个$mobileSystemId
。
它的工作原理:我使用更简单的代码进行了测试,删除了数据库调用,但保留了代码和拼写,未触动过。
所以,错误必须在其他地方。我猜这个代码包含在其他内容中,并且:
$mobileSystemIds = array();
声明多次执行 ,从而丢失了所有数据; $mobileSystemIds = array();
声明本身包含在更本地的范围中,您可以从外部读取,读取空值或完全不同的值。尝试使用以下代码替换代码的第一部分:
GLOBAL $mobileSystemsIds;
if (defined($mobileSystemsIds))
trigger_error("mobileSystemsId defined more than once", E_USER_ERROR);
else
$mobileSystemsIds = array();
并且,在函数体中:
if (!defined($mobileSystemsId))
trigger_error("mobileSystemsId should have been defined", E_USER_ERROR);