NULL 与 “NULL”

在PHP中使用变量动态插入可能某些项可能为空(NULL)的方法

向往数据库中插入数据,其中有些项可能为空(NULL),直接的查询语句如下:

1
2
3
-- content text
-- parent int
INSERT INTO msg(content, parent) VALUES("Test message", NULL);

不过,需要考虑的是,上面的parent不一定为空,而是根据情况判断。当需要为空时,插入到数据库中的是NULL。所以需要采用变量的方式而不是硬coding,如:

1
$query = "insert into msg(content, parent) values('$content', $parent)";

在这里折腾了好久,因为一直通不过,后来才发现在判断该插入空的时候变量的PHP代码不正确。

1
2
3
4
# wrong
$parent = NULL;
# right
$parent = "NULL";

PHP中的NULL代表的是无值(no value),而实际上数据库中需要的是“NULL”,故应赋以字符串值而不是无值。

SQL用户授权的误区

上一次的数据库实验中关于用户授权的部分,我用revoke回收了用户授权,然后使用

1
exec sp_helprotect @username = 'user name'

这个命令来查看其所拥有的权限(我使用的是SQL SERVER 2008),发现没有了对应的权限,然后就收工了,并没有用对应的权限语句去测试。

可是,这一次的实验,在实验室的时候听见后面的同学还是有对应权限的,然后测试了一下,果然,o(╯□╰)o!!

后来,查了一下,原来,revoke只是回收了用户的直接授权,但对于继承用户组或角色而来的权限,却是依然存在的;而大多数情况下,新建的用户都是继承自public角色,故对应的权限是依然存在的;只是,以上语句没有显示出来而已。

看来,还是直接测试一下比较保险实际。

相关说明资料请看这里:REVOKE,虽然是PostgreSQL的,但同样适用。

SQL Server身份验证模式及用户权限

今天做数据库实验,主要就是用户授权及回收授权的问题。

很快就遇到问题了,因为对user1授权后允许其对user2授权。可是我就是登录不了user1。后来使用了经常被河蟹的google来google了好一会,终于找到了解决办法。顺便把我新建用户所遇到的曲折也说一下,新手如我遇到这种情况应该也是可以原谅的。

因为以前没摆弄过SQL Server,而老师给出实验要求中的提示是针对2000的,而我用的是沿自2005的SQL Server 2008,所以情况很不一样。

如果在这里遇到问题,可以看下这个帖子;而以下的图则是我的一些体会,这里需要注意“用户名”和“登录名”之间的映射关系。

首先,需要在服务器安全性中的登录名中右键来选择新建登录名:

新建登录名

继续阅读“SQL Server身份验证模式及用户权限”