如何在phpmyadmin中指定用户输入的值范围?

时间:2016-03-16 13:49:42

标签: php mysql phpmyadmin

我的问题是我有一个名为Autodb的数据库,它在phpmyadmin中有一个名为Bluetooth的表,我必须在其中创建一个名为LAP的列。在此列中,用户应输入介于0X9E8B00-0X9E8B3F之间的任何值,有没有办法在phpmyadmin中执行此操作,并且在SQL中是否有查询来设置要输入的值的范围?

3 个答案:

答案 0 :(得分:1)

我不是100%确定你要问的是什么,但这可能会有所帮助:

如果您想设置用户可以输入的每个值,您可以使用ENUM数据类型。

查看ENUM here

Here is an example of how to use it.

CREATE TABLE Bluetooth
(
  ID SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  BlahBlah VARCHAR(50) NOT NULL,
  LAP ENUM('0X9E8B00', '0X9E8B3F', '0X9E8B3F') NOT NULL
)

如果范围介于2个数字之间,则可以使用约束CHECK

ALTER TABLE myTableName
ADD CONSTRAINT myTableName_myColumnName_valZeroToOneHundred
CHECK (myColumnName BETWEEN 0 AND 100)

ALTER TABLE Table
ADD CONSTRAINT CK_Table_Column_Range CHECK (
    Column >= 0 AND Column <= 100 --Inclusive
)

检查this question

答案 1 :(得分:1)

如果只想在范围之间插入数据:

INSERT INTO Bluetooth (ID, BLAHBLAH, LAP)
SELECT (1, 'BlahBlah', 0x9e8f21) WHERE 
IF (0x9e8f21 >= 0x9e8b00 and 0x9e8f21 <= 0x9e8b3f, 1, 0) = 1

答案 2 :(得分:0)

phpMyAdmin是管理员管理MySQL数据库的工具,而不是最终用户前端,因此这有点超出了phpMyAdmin可以处理的范围。

基本上,在验证插入数据时,您有三种选择:

申请级别

在您的前端,根据您使用的标记显示为PHP,请在将值传递给MySQL之前检查该值。您应该能够对值进行标准十六进制比较,并在超出您设置的范围时打印错误消息。

MySQL触发器

MySQL允许您设置一个触发器,可以在INSERT发生之前检查数据。触发器是在INSERT,UPDATE或DELETE等事件之前(或之后)运行的命令或测试 - 您可能希望在INSERT或DELETE之后执行相同的触发操作。如果值超出您的范围,您可以向客户端返回错误消息。 MySQL应该能够比较十六进制值。

MySQL存储过程

您可以调用存储过程,而不是直接调用INSERT命令。这样做的好处是,无论您使用什么前端,都可以为所有INSERT编写一次;他们都使用存储过程。如果更改边界,则将在存储过程而不是应用程序代码中执行此操作,如果您有多个部署或应用程序访问数据,这是很好的。同样,MySQL应该能够处理十六进制值。

您选择哪一个取决于您的部署和每个部署的经验水平,但在所有这些情况下,您都可以实现您正在尝试的检查。