我一直在编写一个包含安装程序的脚本,现在我陷入了无法执行查询的部分。我正在使用 PDO。
所以,我的问题是第二个try
块内的两个查询没有被执行。
这是我的代码:
<?php
$root_path = '../';
require("{$root_path}includes/functions_captcha.php");
$sub = (isset($_GET['sub'])) ? $_GET['sub'] : '';
$step = (isset($_POST['step'])) ? (int) $_POST['step'] : 0;
$submit = (isset($_POST['submit'])) ? true : false;
$driver_options = '';
$db_errors = array();
$drivers = PDO::getAvailableDrivers();
foreach ($drivers as $driver)
{
$driver_options .= '<option value="' . $driver . '">' . $driver . '</option>';
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Q&A CAPTCHA • Installation</title>
<link type="text/css" rel="stylesheet" href="../admin/style/stylesheet.css" />
</head>
<body>
<div id="main">
<a href="index.php"><h1>Q&A CAPTCHA Installation</h1></a>
<div class="content">
<?php if (!$sub || ($sub == 'database' && !$step) && !$submit): ?>
<form method="post" action="?sub=database">
<table width="100%">
<tr class="table_top">
<th align="center" colspan="2">Database settings</th>
</tr>
<tr class="row1">
<td><strong>Database type:</strong></td>
<td><select name="driver"><?php echo $driver_options; ?></select></td>
</tr>
<tr class="row2">
<td><strong>Database server hostname:</strong></td>
<td><input type="text" name="hostname" placeholder="localhost" required value="" /></td>
</tr>
<tr class="row1">
<td><strong>Database name:</strong></td>
<td><input type="text" name="name" required value="" /></td>
</tr>
<tr class="row2">
<td><strong>Database username:</strong></td>
<td><input type="text" name="username" required value="" /></td>
</tr>
<tr class="row1">
<td><strong>Database password:</strong></td>
<td><input type="password" name="password" value="" /></td>
</tr>
<tr>
<td align="center" colspan="2">
<input type="submit" name="submit" value="Proceed to next step »" />
<input type="hidden" name="step" value="2" />
</td>
</tr>
</table>
</form>
<?php endif; ?>
<?php if ($sub == 'database' && $step == 2 && $submit): ?>
<?php
try {
$db = new PDO("{$_POST['driver']}:host={$_POST['hostname']};dbname={$_POST['name']}", $_POST['username'], $_POST['password']);
try {
$db->beginTransaction();
$time = time();
$sql = "CREATE TABLE captcha_config (
id mediumint(8) UNSIGNED NOT NULL auto_increment,
question varchar(255) DEFAULT '' NOT NULL,
date int(11) UNSIGNED DEFAULT '0' NOT NULL
answers TEXT DEFAULT '' NOT NULL);";
$db->query($sql);
$sql = "INSERT INTO captcha_config
(question, date, answers) VALUES (
'What color can the sky have?', {$time}, 'Blue~~Grey~~Orange');";
$db->query($sql);
$db->commit();
}
catch (PDOException $e)
{
$db->rollBack();
$db_errors[] = (strpos($e->getMessage(), ']') !== false) ? substr(strrchr($e->getMessage(), ']'), 1) : $e->getMessage();
}
}
catch (PDOException $e)
{
$db_errors[] = (strpos($e->getMessage(), ']') !== false) ? substr(strrchr($e->getMessage(), ']'), 1) : $e->getMessage();
}
$db_errors = implode('<br />', $db_errors);
?>
<form method="post" action="?sub=config">
<table width="100%">
<tr class="table_top">
<th align="center" colspan="2">Database connection</th>
</tr>
<tr class="row1">
<td align="center"><?php echo (empty($db_errors)) ? '<strong style="color: green;">Connection was successful</strong>' : "<strong style='color: red;'>{$db_errors}</strong>"; ?></td>
</tr>
<tr>
<td align="center">
<?php if (empty($db_errors)): ?>
<input type="submit" name="submit" value="Proceed to next step »" />
<?php else: ?>
<a href="index.php" class="button">« Back to previous step</a>
<?php endif; ?>
<input type="hidden" name="step" value="3" />
</td>
</tr>
</table>
</form>
<?php endif; ?>
</div>
</div>
</body>
</html>