mysql:向 php 发送 sqlstate 信号
Posted
技术标签:
【中文标题】mysql:向 php 发送 sqlstate 信号【英文标题】:mysql: signal sqlstate to php 【发布时间】:2015-11-16 22:57:39 【问题描述】:大家好,我正在开发一个 php-mysql 应用程序。 mysql 数据库使用触发器来强制执行各种约束。
假设有一个表只有两列(ID 和值),并且触发器防止插入负值。
创建 TEABLE my_tbl (
id INT(9) AUTO_INCREMENT 主键,
值 INT(9)
)
触发器看起来像这样:
创建触发器my_trigger
在插入之前my_tbl
每一行
开始
IF NEW.value
有几个触发器,每个触发器都有这行代码: SIGNAL sqlstate '45000' SET message_text = '值必须为正'; 唯一改变的是 message_text,它取决于违反的约束。如果你是我的mysql控制台输入日期触发器“显示”我这个描述但是当我使用php界面时它只是不添加数据并且不返回任何错误,所以用户没有任何线索数据尚未插入。 我的问题:有什么方法可以在 php 生成的页面上显示 message_text 吗? 我使用了搜索功能,但我发现的每个解决方案都使用 PDO 和/或面向对象的 php,而我想坚持使用 procedural php 和 mysql
【问题讨论】:
这可能是php.net/manual/en/mysqli.sqlstate.php ? 感谢您的快速回答,但我已经找到了该函数,如果我理解正确,它将返回标识错误的五个字符代码,因此在 m 示例中(我无法正确显示格式化,对不起^^) 它会返回 '45000' 而我需要 'value must be positive' 我的错,我没有滚动到那个页面的底部,你是对的。 @DeDee 你找到这个问题的解决方案了吗?在 PHP 中读取 MESSAGE_TEXT? @RehbanKhatri 恐怕不,我没有在看,但如果我必须这样做,我会在 45000 - 450FF 范围内摆弄,并在 SQL 和 PHP 中创建相同的错误消息,所以两者二进制文件会知道这个数字的含义。我知道自定义错误只推荐 45000,但我怀疑他们不会保留更宽的空间,即 45000 - 4500F 或 45000 - 450FF。 【参考方案1】:我使用mysqli_error函数解决了这个问题,它返回最后的错误信息。
【讨论】:
这对我不起作用。它显示最近的错误,但不是我在 message_text 中给出的错误以上是关于mysql:向 php 发送 sqlstate 信号的主要内容,如果未能解决你的问题,请参考以下文章
SQLSTATE [42000]:语法错误或访问冲突:1064 PHP/MySQL [关闭]
PHP + MYSQL + Laravel - “SQLSTATE [HY000] [2002] 连接被拒绝” [重复]
thinkphp3.2 连接Mysql5 报错 服务器向客户端发送未知的字符集。