我在MySQL中有一个包含各种VARCHAR字段的表。我想通过PHP从表单插入一些用户数据。显然,如果我知道PHP中的字段长度,我可以用substr()
限制那里的数据长度。但这有点违反了DRY (字段长度存储在MySQL中,并且在我的PHP脚本中作为常量存储)。有没有办法让我配置一个插入,让它自动砍掉过长的字符串,而不是失败?
编辑:当我有过长的字符串时,它在PHP/PDO中失败了(或者至少导致了异常)。不确定我必须在PHP/PDO中做什么,所以它做了正确的事情。
编辑2: Ugh。这是错误的方法;即使我让它在插入时正常工作,如果我想检查重复的字符串,它也不会正确匹配。
发布于 2009-06-19 17:52:37
您可以查询information_schema以获得列的长度,并在insert之前使用该数据进行截断,但这超出了必要的开销。只需关闭此语句的严格SQL模式:
SET @prev_mode = @@sql_mode;
SET sql_mode = '';
INSERT blah....;
SET sql_mode = @prev_mode;
发布于 2009-07-02 17:48:42
您可以使用列元数据检查字符串长度。(PHP Manual on PDOStatement->getColumnMeta)
通过这种方式获取整个表的元数据
$query = $conn->query("SELECT * FROM places");
$numcols = $query->columnCount();
$tablemeta = array();
for ($i = 0; $i < $numcols; $i++) {
$colmeta = $query->getColumnMeta($i);
$tablemeta[$colmeta['name']] = $colmeta;
}
https://stackoverflow.com/questions/1018954
复制相似问题