实际上,我对PHP和SQLite3以及我的一些字符串在那里的行为方式感到非常恼火。
我试图节省开放时间,但在字符串中,而不是数字,以防止前导零的问题(现在仍然有它哈哈…-.-)。
小时和分钟有自己的列,但当我插入'0x‘时,零就消失了,无论x是什么,都留在数据库中。:/
我肯定我只是错过了一些该死的小部分...
我已经检查了INSERT-statement,但什么也没找到。
插入字符串的示例:
INSERT INTO opening INSERT INTO opening (start_day, end_day, start_hour, start_minute, end_hour, end_minute) VALUES('Montag', 'Freitag', '00', '00', '01', '00')
但是输出结果是:
11|Montag|Freitag|0|0|1|0代码的一部分:
class Database_Opening_Hours extends SQLite3{
function __construct() {
if(!file_exists("../../data/opening_hours/opening_hours.sqlite")){
$this->open("../../data/opening_hours/opening_hours.sqlite");
$this->exec('CREATE TABLE opening (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, start_day STRING, end_day STRING, start_hour STRING, start_minute STRING, end_hour STRING, end_minute STRING)');
}
else{
$this->open("../../data/opening_hours/opening_hours.sqlite");
}
}
}
$db = new Database_Opening_Hours();
$insert = "INSERT INTO opening (start_day, end_day, start_hour, start_minute, end_hour, end_minute) VALUES('".htmlspecialchars($_GET["start_day"])."','".htmlspecialchars($_GET["end_day"])."','".$start_hour."','".$start_minute."','".$end_hour."','".$end_minute."')";
if($db->exec($insert)){
$db->close();
unset($db);
echo "Insert erfolgreich";
}else{
$db->close();
unset($db);
echo "Nicht wirklich...";
}发布于 2015-11-16 21:32:52
非常确定您的列的类型设置为整数(或任何其他数字类型),而不是文本。
确保仔细检查列数据类型,并实际转储表,以便我们检查它是否真的设置为TEXT。
发布于 2015-11-18 22:45:40
这是由使用动态类型的SQLite引起的。从FAQ
这是一个功能,而不是一个错误。SQLite使用dynamic typing。它不强制数据类型约束。任何类型的数据(通常)可以插入到任何列中。您可以将任意长度的字符串放入整数列,将浮点数放入布尔列,或将日期放入字符列。在CREATE TABLE命令中分配给列的数据类型不限制可以放入该列的数据。每一列都可以包含任意长度的字符串。
从链接页面(强调我的):
为了最大限度地提高SQLite和其他数据库引擎之间的兼容性,SQLite支持列上的“类型关联”概念。列的类型关联是存储在该列中的数据的推荐类型。这里的重要思想是该类型是推荐的,而不是必需的。任何列仍然可以存储任何类型的数据。只是有些列,如果可以选择,会更喜欢使用一个存储类而不是另一个。列的首选存储类称为它的“亲和性”。
所以SQLite会将你的值动态地转换为整数。
我建议将start_hour和start_minute组合到start_time中( end_字段也是如此),并以00:00格式存储值。
SQLite将按原样存储,但它足够智能,可以识别时间值并允许您执行日期/时间操作:
select time(start_time, '+1 hour') from opening发布于 2017-04-25 14:22:23
我在使用C/C++时遇到了这个问题,因为我没有引用字符串:
insert into test values('aa', 'bb');https://stackoverflow.com/questions/33736609
复制相似问题