基本上我有一个动态表单,根据用户选择的方式提供可变数量的输入,我已使用此name="user[]"
设置所有文本输入以将值存储到数组中。
然后我将表单位置提交到此数组后:
$array = check_input($_POST['user']);
然后我在这样的查询中使用这个数组:
$query = 'SELECT * FROM users_tb WHERE student_number IN(' . implode(',', $array) .')';
mysql_query($query) or die(mysql_error());
$result=mysql_query($query);
我收到此错误:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1
现在我想检查值是否在数组中,但当我尝试print_r($array);
查看值是否存在时,它只打印单词“Array”
我在这里做错了什么?
感谢
其他问题----
我有一个由用户以不同的动态形式输入的数组字符串。我想将数组中的每个值与itemid(对所有人都相同)存储在一个表中
我的查询当前正在使用implode将整个数组插入一行text_value。有没有办法代替循环遍历数组并为数组中的每个值运行查询,让我这样做?
当前查询:
$query = "INSERT INTO answers_tb (item_id, text_value)VALUES('$itemid','".implode(',', $answers) . "')";
这是print_r的数组:
数组([0] =>选项1 [1] =>选项2 [2] =>选项3 [3] =>选项4)
感谢
答案 0 :(得分:1)
我过去做过类似的查询,我不得不使用这个内爆来实现它:
$numbers = "'".implode($array,"','")."'";
$query = "SELECT * FROM users_tb WHERE student_number IN ($numbers)";
编辑:这可能不是您问题的解决方案,问题可能是您的check_input函数。如果参数是数组。修改不会将数组作为输入参数,而是一个字符串,因此您必须循环遍历数组并修剪每个元素。
答案 1 :(得分:1)
您在check_input()中执行的所有操作都是针对字符串设计的。请考虑尝试这一点。
function check_input_array($data)
{
foreach ($data as &$d) {
$d = trim($d);
$d = stripslashes($d);
$d = htmlspecialchars($d);
$d = mysql_real_escape_string($d);
}
return $data;
}
现在你将有两个函数:check_input()适用于字符串,check_input_array()适用于一维数组。
另外,请参阅fredrik的回答,因为他发现您的代码忘记引用您放入SQL字符串的值。
我的猜测是,对于您的样本数组,需要将以下内容插入到表中。
item_id|text_value
-------+----------
0|option 1
1|option 2
2|option 3
3|option 4
那时候看起来就像这样。
$records = array();
foreach($array as $item_id => $text_value) {
$records[] = '("' . $item_id . '","' . $text_value . '")';
}
$sql = 'INSERT INTO answers_tb (item_id, text_value) VALUES';
$sql .= implode(',', $records);
答案 2 :(得分:0)
您的数组为空。
当数组为空时print_r
将打印出来:
Array
(
)
此外,当数组为空时,您的查询将如下所示:
SELECT * FROM users_tb WHERE student_number IN()
由于IN子句的空列表而不正确。
您可以尝试:
$query = 'SELECT * FROM users_tb WHERE student_number IN('NULL, ' . implode(',', $array) .')';