如果未将该列默认为“0”,则无法递增该列。
这可以用一个简单的DB小提琴来表现
起始空值:
CREATE TABLE t(
id INT(10),
v INT(10)
);
INSERT INTO t (id)VALUES(1);
SELECT * FROM t;
UPDATE t SET v = v+1 WHERE id=1;
SELECT * FROM t;
null
对于
v
如下图所示:
null + 1 = null
开始0:
CREATE TABLE t(
id INT(10),
v INT(10) default 0
);
INSERT INTO t (id)VALUES(1);
SELECT * FROM t;
UPDATE t SET v = v+1 WHERE id=1;
SELECT * FROM t;
在这种情况下,第一个Select返回
0
对于
五
1
对于
五
另外(SQLInjection)
正如我在评论中所说:
或者换句话说,不要将用户变量(或任何客户端数据)注入到您的SQL中,否则它会变成这样:
UPDATE `Buttons(SUMA)` SET SUMA = SUMA + 1 WHERE ID = '' OR 1 --'"
这将增加数据库中非空的每一行。基本上
'
关闭另一个引号,然后OR 1始终为真(对于每一行)。不幸的是,我不能展示
--
这就是为什么我们使用事先准备好的声明。这个例子有点小,但是我在这里看到了登录代码,我可以通过
"' OR 1 LIMIT 1 --'"
在中,使用偏移量,可以遍历每个用户。他们正在寻找一行返回的用户名和密码匹配。
表名
Buttons(SUMA)
这真的是这个名字吗?因为它只有在背特人逃跑的情况下才能起作用。正如我在上面的SQLInjection示例中所做的那样。
$link = mysql_connect($servername, $username, $password);
如果定义了这些,则open标记就在它们的正上方。我通常把它塞进简化的示例代码中。但值得一问。显然,如果数据库未定义,则无法连接到数据库。