gpt4 book ai didi

PHP MySQL (PDO) CREATE TABLE 不创建表(实际上什么都不做)

转载 作者:行者123 更新时间:2023-11-29 05:31:07 25 4
gpt4 key购买 nike

从今天早上开始,我一直在苦苦挣扎,试图编写一个 install.php 文件,将三个空表(用户、 session 、帖子)插入到数据库中。当我用 PHPMyAdmin 注入(inject)它时,我使用的 SQL 代码是有效的,但显然我在 PHP 中处理它的方式是错误的,因为当我运行我的 install.php 文件时,我的数据库仍然是空的。这是我的代码:

<?php
try {
$con = new PDO('mysql:host=omitted;dbname=omitted','omitted','');
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$con->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$q="CREATE TABLE posts (
title varchar(150) NOT NULL,
body text NOT NULL,
created varchar(100) NOT NULL,
user varchar(40) NOT NULL,
id int(20) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id),
UNIQUE KEY id (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

CREATE TABLE sessions (
session_id varchar(40) NOT NULL,
data text NOT NULL,
last_activity int(11) NOT NULL,
PRIMARY KEY (session_id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

CREATE TABLE users (
id int(11) NOT NULL AUTO_INCREMENT,
username varchar(40) NOT NULL,
password varbinary(250) NOT NULL,
email varchar(40) NOT NULL,
salt varchar(20) NOT NULL,
name varchar(50) NOT NULL DEFAULT '',
PRIMARY KEY (id),
UNIQUE KEY email (email),
UNIQUE KEY username (username),
UNIQUE KEY id (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ";

$stmt = $con->prepare($q);
$stmt->execute();
echo "success";

} catch (PDOException $e) {
$e->getMessage();
}


?>

我假设这是我的一些愚蠢的错误(因为我最近的 3 次头痛也很愚蠢)但此时此刻我真的想不通。有什么想法吗?

最佳答案

每次 prepare 调用只能准备一个语句。要执行多个语句,您必须使用 PDO::exec方法。

例如:

$con = new PDO('mysql:host=localhost;dbname=db','user','pass');
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$con->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$q="CREATE TABLE posts (
title varchar(150) NOT NULL,
body text NOT NULL,
created varchar(100) NOT NULL,
user varchar(40) NOT NULL,
id int(20) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id),
UNIQUE KEY id (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

CREATE TABLE sessions (
session_id varchar(40) NOT NULL,
data text NOT NULL,
last_activity int(11) NOT NULL,
PRIMARY KEY (session_id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

CREATE TABLE users (
id int(11) NOT NULL AUTO_INCREMENT,
username varchar(40) NOT NULL,
password varbinary(250) NOT NULL,
email varchar(40) NOT NULL,
salt varchar(20) NOT NULL,
name varchar(50) NOT NULL DEFAULT '',
PRIMARY KEY (id),
UNIQUE KEY email (email),
UNIQUE KEY username (username),
UNIQUE KEY id (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ";

try {
$con->exec($q) or die(print_r($db->errorInfo(), true));;
echo "Success";

} catch (PDOException $e) {
$e->getMessage();
}

关于PHP MySQL (PDO) CREATE TABLE 不创建表(实际上什么都不做),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14648592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com