1

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

我有以下 $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 我的字符串是文本字符串,而不是一堆数字,我确定它很简单,但我以前没有遇到过。

谢谢保罗

4

3 回答 3

1

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

试试这个:

$sql="INSERT INTO $db_name.$tbl_name (`game_id` ,`user_id` ,`scores`) VALUES (NULL , $session_id, '$scores_csv')";
于 2013-06-12T12:14:08.880 回答
1

我建议您使用高级库进行查询,例如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 注入

于 2013-06-12T12:20:59.627 回答
0
$scores_csv = "'".$scores_csv."'";
$sql="INSERT INTO $db_name.$tbl_name (`game_id` ,`user_id` ,`scores`) VALUES (NULL , $session_id, $scores_csv)";
于 2013-06-12T12:14:56.610 回答