我是 MySQL 的新手,我想知道:是否可以针对某种模式匹配对尝试的插入进行表检查,并拒绝任何与模式匹配失败的插入,或者是否必须全部完成检查 PHP / what-曾经的服务器端语言端?
我正在特别考虑将表中的email
列限制user
为只能使用某种类似正则表达式的模式匹配来包含电子邮件地址。
我是 MySQL 的新手,我想知道:是否可以针对某种模式匹配对尝试的插入进行表检查,并拒绝任何与模式匹配失败的插入,或者是否必须全部完成检查 PHP / what-曾经的服务器端语言端?
我正在特别考虑将表中的email
列限制user
为只能使用某种类似正则表达式的模式匹配来包含电子邮件地址。
因为您可以使用 DBMS 存储过程做一些事情,这并不是一个好主意。我强烈建议您在 PHP 而不是 DBMS 中进行这种验证。
PHP 的安装工具包包含一个电子邮件验证器。见这里: http: //php.net/manual/en/filter.filters.validate.php
如果您在 DBMS 中执行此操作,则必须重新发明瘪胎,呃,轮子。
尽管已经接受了答案,但我相信有一些用例可以在数据库端进行验证。
这是额外的安全层。尽管存在矫枉过正之类的事情,但我认为可以提出这样的情况,即无论您在应用程序端验证得多么好,并使用 PDO 的参数绑定,总有可能有人想出一种绕过它的方法。
如果相同的数据可能被多个应用程序使用,它会强制执行规则,以防不同应用程序的开发人员无法正确验证。
这是在 mysql 中使用触发器进行验证的示例。http://cvuorinen.net/2013/05/validating-data-with-triggers-in-mysql/
在这里,您可以看到如何将这些 IF 语句中的代码替换为正则表达式。SQL IF 语句中的正则表达式
我还没有尝试过,所以不知道它是否有效,但有一个链接到正则表达式上的 mysql 文档。 http://dev.mysql.com/doc/refman/5.1/en/regexp.html
当然,您也应该始终在应用程序端进行验证。