首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sqlite2到sqlite3转换php代码

sqlite2到sqlite3转换php代码
EN

Stack Overflow用户
提问于 2016-09-22 23:13:43
回答 1查看 1.2K关注 0票数 1

我正试图在我的服务器上运行一个脚本。此脚本使用sqlite2作为数据库。php文件是用sqlite2编写的,但在我的服务器上我安装了sqlite3。

这是我的代码:

代码语言:javascript
复制
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);
}

当我运行代码时,我得到了错误,例如;

代码语言:javascript
复制
Fatal error: Call to undefined function sqlite_open()

我认为代码还没有为sqlite3做好准备。如何将此代码转换为sqlite3?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2016-09-23 17:50:47

您需要使用SQLite3 class。与当前代码的显著不同之处在于,您将使用对象及其方法,而不是过程函数。

为了连接(或创建)数据库,您需要实例化一个新的SQLite3对象。如果有问题,将抛出Exception

代码语言:javascript
复制
try {
    $db = new SQLite3('chatdb');
} catch (Exception $e) {
    die($e->getMessage());
}

您不应该将变量连接到您的查询中,因为这是一个安全风险(参见:How can I prevent SQL-injection in PHP?),所以我修改了您的函数以使用绑定:

代码语言:javascript
复制
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;
}

然后,您可以像这样创建表:

代码语言:javascript
复制
if (sqlite_table_exists($db, 'table_name') == false) {
    $db->exec('CREATE TABLE ...');
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39642824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档