【问题标题】:How do i pass a comma separated list of numbers to my MYSQL as a string如何将逗号分隔的数字列表作为字符串传递给我的 MYSQL
【发布时间】:2013-06-12 12:09:52
【问题描述】:

很棒的网站,我遇到了一个我自己解决的简单问题(我确定),但我称我的修复是一个问题,而不是一个真正的解决方案,所以我在这里要求一个真正的答案。

我有下面的 $sql 字符串在 PHP 中将一些简单的数据写入 mysql 数据库:-

$sql="INSERT INTO $db_name.$tbl_name (`game_id` ,`user_id` ,`scores`) VALUES (NULL , $session_id, $scores_csv)";

$scores_csv 包含类似 '60,90,45,26,41,80' 但上面的代码不起作用?如果我用以下代码替换上面的代码,它将起作用:-

$sql="INSERT INTO $db_name.$tbl_name (`game_id` ,`user_id` ,`scores`) VALUES (NULL , $session_id, '60,90,45,26,41,80')";

我在第一个代码示例中回显出 $sql 和逗号分隔列表的字符串不包含单引号,但在第二个代码示例中包含单引号,使其工作。

所以它接缝虽然它是一个字符串,如果我不包含单引号,有一个数据库不匹配并且数据没有被存储。

如果我在将 $scores_csv 变量发送到 MYSQL 之前用单引号将其括起来,那么它确实可以工作,但肯定有更好的解决方案,我如何告诉 Mysql 我的字符串是文本字符串,而不是一堆数字,我确定它很简单,但我以前没有遇到过。

谢谢保罗

【问题讨论】:

  • 你告诉Mysql我的字符串是一个文本字符串,用引号括起来,否则它把它看作一个值列表
  • 啊,谢谢,我知道这会很简单,谢谢,现在可以正常工作了.. 干杯保罗
  • 我无法在已经给出的答案中添加任何内容,但是您在表中存储逗号分隔列表这一事实向我表明您的架构可能需要访问,因为它可能不是最好的适合您的问题,而无需了解有关该应用程序的更多信息。
  • 嗨马丁,我可以将每个数字存储在自己的行中,然后使用循环,但根据我的需要,这条接缝是最快和最简单的路线,更不用说应该更容易服务器负载。

标签: php mysql string text


【解决方案1】:

您需要将$scores_csv 变量括在引号之间。

试试这个:

$sql="INSERT INTO $db_name.$tbl_name (`game_id` ,`user_id` ,`scores`) VALUES (NULL , $session_id, '$scores_csv')";

【讨论】:

    【解决方案2】:

    我建议您使用高级库进行查询,例如 PDO 并使用 prepare 语句(用于数据绑定):

    $sth = $dbh->prepare('INSERT INTO ? (`game_id` ,`user_id` ,`scores`) VALUES (NULL, ?, ?)');
    $sth->execute(array($db_name.$tbl_name, $session_id, $scores_csv));
    

    这样你也被SQL Injection救了

    【讨论】:

      【解决方案3】:
      $scores_csv = "'".$scores_csv."'";
      $sql="INSERT INTO $db_name.$tbl_name (`game_id` ,`user_id` ,`scores`) VALUES (NULL , $session_id, $scores_csv)";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-19
        • 2014-10-12
        • 2016-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-22
        相关资源
        最近更新 更多