null在下面的查询中输入为0

de90aj5v  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(297)

在下面的查询中,我将多个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。

x6yk4ghg

x6yk4ghg1#

我通过在代码中使用like而不是“=”来清除这个问题。

3qpi33ja

3qpi33ja2#

我认为这里的问题是 id 列为数字。在第一个测试中,您可能传递了一些合法的数字字符串 id ,例如 '123' . mysql在内部转换 '123' ,字符串,以及 123 ,数字。然而,在你的第二次测试中,你通过了 `` . 在本例中,mysql似乎正在将其转换为 0 . 另外,假设 id 零确实存在,你会看到 NULL 在你的电子邮件专栏里。
所以,我认为这里的更正是将数字绑定到insert查询,假设 id 列实际上是数字。
而且,您应该了解如何在mysql中使用prepared语句。

相关问题