【发布时间】:2015-11-16 13:29:49
【问题描述】:
实际上,我对 PHP 和 SQLite3 以及我的一些字符串在那里的行为方式非常生气。
我尝试保存开放时间,但使用字符串而不是数字来防止前导零出现问题(现在仍然有它,哈哈...-.-)。
小时和分钟有自己的列,但是当我插入“0x”时,零消失了,无论 x 是什么,都留在数据库中。 :/
我确定我只是在某处错过了一些该死的小部分......
我已经检查了 INSERT 语句,但什么也没找到。
插入字符串示例: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...";
}
【问题讨论】:
-
您正在插入整数,因此 01(变为)> 1 .. 不要对 PHP 生气,它是您自己的代码..
-
还使用准备好的语句和查询参数,而不是对查询进行字符串操作。
htmlspecialchars甚至不适合清理 SQL。