1

从今天早上开始,我一直在苦苦挣扎,试图编写一个 install.php 文件,它将三个空表(用户、会话、帖子)插入数据库。当我用 PHPMyAdmin 注入它时,我使用的 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 次头痛也很愚蠢)但此刻我真的无法弄清楚。有任何想法吗?

4

2 回答 2

2

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();
}
于 2013-02-01T14:38:04.337 回答
1

这不是一个查询,而是一组查询。
只需通过单独的调用一一运行它们。

于 2013-02-01T14:37:36.893 回答