我正在使用Mariadb并使用VARCHAR(30)设置表格。当我插入一个包含数字“192”的字符串,然后选择它我就能打印出192.当我插入像“a48”这样的字符串时,它似乎被忽略了。我试过插入一个完整的字母串“a”,但我仍然一无所获。在VARCHAR(M)的Mariadb文档中,我发现了这个:
“如果唯一索引由删除或忽略尾随填充字符的列组成,则插入到该列中的值仅因尾随填充字符数而不同将导致重复键错误”
我不确定这与它有什么关系?我使用字母只是为了更容易解析客户端程序上的数据。如果我找不到解决方案,我可能会在选择后将其填充到服务器上。
有没有人对这里发生的事情有任何建议,或者我可以尝试找出问题的建议?
答案 0 :(得分:0)
假设melon是接收字符串的列,那么你应该在查询中的$ melon变量周围加上单引号,如下所示:
query("REPLACE INTO state (id, melon, image) VALUES (1, '$melon', $image)");
字符串值应该用单引号括起来;数值不是必须的。
因为目标列是varchar(30),所以该值应始终用单引号括起来。 MariaDB可以解释您提供数值时的含义,但它不会理解没有单引号的字母数字值。如果你使用单引号,两者都可以工作,如图所示。
为避免SQL注入错误,最好使用预准备语句,如https://www.w3schools.com/php/php_mysql_prepared_statements.asp所述。