1

3 つの空のテーブル (ユーザー、セッション、投稿) をデータベースに挿入する install.php ファイルを作成しようとして、今朝から苦労しています。私が使用しているSQLコードは、PHPMyAdminで注入すると有効ですが、install.phpファイルを実行するとデータベースが空のままになるため、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

呼び出しごとに 1 つのステートメントのみを準備でき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

これはクエリではなく、一連のクエリです。
個別の呼び出しで 1 つずつ実行するだけです。

于 2013-02-01T14:37:36.893 に答える