我正在尝试在我的服务器上运行脚本。该脚本使用sqlite2作为数据库。 php文件是用sqlite2编写的,但在我的服务器上我安装了sqlite3。
这是我的代码:
if (!$db = sqlite_open ('chatdb'))
{
die('Database problem. Please try again later.');
}
function sqlite_table_exists ($db, $mytable)
{
$result = sqlite_query($db, "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$mytable'");
$count = intval(sqlite_fetch_single($result));
return $count > 0;
}
if (sqlite_table_exists($db, 'messages') == false)
{
$sql = 'CREATE TABLE messages (username VARCHAR(50), message TEXT, date DATE)';
sqlite_query ($db, $sql);
}
if (sqlite_table_exists($db, 'users') == false)
{
$sql = 'CREATE TABLE users (username VARCHAR(50) UNIQUE, last_activity DATE, is_kicked INTEGER DEFAULT 0, is_banned INTEGER DEFAULT 0, kick_ban_message VARCHAR(100))';
sqlite_query ($db, $sql);
}
if (sqlite_table_exists($db, 'bans') == false)
{
$sql = 'CREATE TABLE bans (ip VARCHAR(15), time DATE)';
sqlite_query ($db, $sql);
}
当我运行代码时,我会收到错误,例如;
Fatal error: Call to undefined function sqlite_open()
我认为代码还没有为sqlite3做好准备。如何将此代码转换为sqlite3?
感谢。
答案 0 :(得分:0)
您需要使用SQLite3 class。与当前代码的显着区别在于,您将使用对象及其方法而不是过程函数。
要连接(或创建)数据库,您需要实例化一个新的SQLite3对象。如果出现问题,将引发Exception:
try {
$db = new SQLite3('chatdb');
} catch (Exception $e) {
die($e->getMessage());
}
您不应该将变量连接到查询中,因为这是一个安全风险(请参阅:How can I prevent SQL-injection in PHP?)所以我已修改您的函数以使用绑定:
function sqlite_table_exists($db, $mytable)
{
$stmt = $db->prepare("SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name=:name");
$stmt->bindValue('name', $mytable);
$result = $stmt->execute();
$row = $result->fetchArray(SQLITE3_NUM);
return $row[0] > 0;
}
然后你可以这样创建你的表:
if (sqlite_table_exists($db, 'table_name') == false) {
$db->exec('CREATE TABLE ...');
}