问题很简单。
我有什么问题
我确实有二维数组$someArray[][]
。第一个括号我可以放"主题"或"日期"。第二个,从1到4(只是一个例子-$someArray['date'][0]
)
现在,当我尝试用mysql_query()
从数据库中获取一些数据时,我遇到了一些问题。我正试图在查询的WHERE部分使用这个二维数组。
举例说明哪些有效,哪些无效
$result = mysql_query("SELECT some from table where date='$someArray[date][0]' AND subject='$someArray[subject][0]') or die(mysql_error());
当我使用这个时,它不会给我任何回报。但当我第一次将这些值代入新变量时:
$variable1 = $someArray['date'][0];
$variable2 = $someArray['subject'][0];
然后在查询中使用它们
`$result = mysql_query("SELECT some from table where date='$variable1' AND subject='$variable2') or die(mysql_error());
它就像一个符咒。
问题
我的第一个查询出了什么问题,我写错了那些数组吗?我没有任何错误
在mysql查询中,我尝试将单撇号放在[]括号内,但后来确实出现了错误。如果我在查询中使用类似于:$someotherArray[somedata]
的数组,它也可以在没有它们的情况下工作。
数组插值仅适用于单一级别的下标。对于多维数组,您需要使用{...}
包装器:
$result = mysql_query("SELECT some from table where date='{$someArray['date'][0]}' AND subject='{$someArray['subject'][0]}') or die(mysql_error());
查询中的语法缺少双引号。并插入字符串,而不是仅将其添加到其中。字符串解析器不喜欢多维数组。
解决方案:
$result = mysql_query("SELECT some from table where date='".$someArray[date][0]."' AND subject='".$someArray[subject][0]."'") or die(mysql_error());
就像@barmar提到的括号也适用于
顺便说一句,请确保对数据进行转义,以确保SQL注入被阻止!