Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sqlite2到sqlite3转换php代码_Php_Sqlite - Fatal编程技术网

sqlite2到sqlite3转换php代码

sqlite2到sqlite3转换php代码,php,sqlite,Php,Sqlite,我正在尝试在我的服务器上运行脚本。此脚本使用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($d

我正在尝试在我的服务器上运行脚本。此脚本使用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

谢谢。

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

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

try {
    $db = new SQLite3('chatdb');
} catch (Exception $e) {
    die($e->getMessage());
}
您不应该将变量连接到查询中,因为这是一种安全风险(请参阅:),因此我修改了您的函数以使用绑定:

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 ...');
}
你需要使用。与当前代码的显著区别在于,您将使用对象及其方法,而不是过程函数

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

try {
    $db = new SQLite3('chatdb');
} catch (Exception $e) {
    die($e->getMessage());
}
您不应该将变量连接到查询中,因为这是一种安全风险(请参阅:),因此我修改了您的函数以使用绑定:

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 ...');
}

与“未准备好”无关。您的PHP安装未启用sqlite插件。是否已安装并启用PHP sqlite3扩展?是的,sqlite3已安装并启用。与“未就绪”无关。您的PHP安装没有启用sqlite插件。您是否安装并启用了PHP sqlite3扩展?是的,sqlite3已安装并启用。