在下面的查询中,我将多个select2选项中的一个数组保存到数据库中。
这里有一个数据库表participants,其中包含event\u id(int,not null)、user\u id(int,null)、p\u mail(varchar,null)。
当我通过正确的id,这是在用户的数据得到妥善保存和null将显示在p\电子邮件列。
但是当我通过数组传递一些varchar值时,用户id被保存为0,应该为null,null存储在p\u email中,p\u email应该存储这些值。
foreach($resources as $r) {
global $response;
$sql = "INSERT INTO participants(event_id, user_id, p_email)
SELECT $response,
CASE
WHEN EXISTS (SELECT * from users where id = '$r') THEN
'$r'
ELSE NULL
END,
CASE
WHEN EXISTS (SELECT * from users where id = '$r') THEN
NULL
ELSE '$r'
END
FROM users WHERE id = 1;";
$query_result = $conn->query($sql) or die("Failed".$sql);
这是预期的,在传递int的地方,如果id存在,它应该存储在user\ id列中,否则如果它的varchar,它应该存储在p\ email中。
如果我在检查后存储了一个不在用户中的varchar,而不是存储在p\u电子邮件中,则显示。它在p\u email中存储null,在user\u id中存储0。
2条答案
按热度按时间x6yk4ghg1#
我通过在代码中使用like而不是“=”来清除这个问题。
3qpi33ja2#
我认为这里的问题是
id
列为数字。在第一个测试中,您可能传递了一些合法的数字字符串id
,例如'123'
. mysql在内部转换'123'
,字符串,以及123
,数字。然而,在你的第二次测试中,你通过了 `` . 在本例中,mysql似乎正在将其转换为0
. 另外,假设id
零确实存在,你会看到NULL
在你的电子邮件专栏里。所以,我认为这里的更正是将数字绑定到insert查询,假设
id
列实际上是数字。而且,您应该了解如何在mysql中使用prepared语句。