但是当我通过数组传递一些varchar值时,user_id被保存为0,应该为NULL,而Null存储在p_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_email中,则显示。它在p_email中存储null,在user_id中存储0。
答案 0 :(得分:0)
我认为这里的问题是id
列是数字列。在第一个测试中,您大概传递了一些合法的数字字符串id
,例如'123'
。 MySQL在内部'123'
和字符串123
之间进行转换没有问题。但是,在第二次测试中,您通过了类似abc
的操作。在这种情况下,MySQL似乎正在将其转换为数值0
。另外,假设确实存在id
零,那么您的电子邮件列中也会看到NULL
。
因此,我认为此处的更正是假设id
列确实是数字,而只是将数字绑定到插入查询。
而且,您应该阅读有关在MySQL中使用准备好的语句的信息。
答案 1 :(得分:0)
我通过在代码中使用LIKE而不是'='清除了此问题。