我对 php 和这个论坛非常陌生,所以请原谅任何错误或错误的问题。 在我提供的代码中,我只是想在数据库“mydb”中创建一个表。我测试了与数据库的连接(它有效)。这只是我在创建表格时遇到的问题。 任何建议或批评将不胜感激。谢谢
<?php
/*
*
* File: PDOcreateTabletcompany.php
* By: Jay
* Date: 24-10-13
*
* This script createsTableintoDB
*
*====================================
*
*/
try {
$db = new PDO("mysql:dbname=mydb;host=localhost", "root", "" );
} catch(PDOException $e) {
echo $e->getMessage();
}
$table= "tcompany";
$columns = "ID INT( 11 ) AUTO_INCREMENT PRIMARY KEY, Prename VARCHAR( 50 ) NOT NULL, Name VARCHAR( 250 ) NOT NULL,
StreetA VARCHAR( 150 ) NOT NULL, StreetB VARCHAR( 150 ) NOT NULL, StreetC VARCHAR( 150 ) NOT NULL,
County VARCHAR( 100 ) NOT NULL, Postcode VARCHAR( 50 ) NOT NULL, Country VARCHAR( 50 ) NOT NULL " ;
$createTable = $db->exec("CREATE TABLE IF NOT EXISTS mydb.$table ($columns)");
if ($createTable)
{
echo "Table $table - Created!<br /><br />";
}
else { echo "Table $table not successfully created! <br /><br />";
}
?>
由于创建表时没有行受到影响 $createTable 返回 0 请参阅手册
PDO::exec() 返回被修改或删除的行数 通过您发出的 SQL 语句。如果没有行受到影响,则 PDO::exec() 返回 0。
当您创建表时,如果您的列名是硬编码的(如下面的代码所示),您将免受 SQL 注入的影响。我已经留下了
$table = "tcompany";
,因为你想打印创建的表格(我自己会省略它)
我添加了 错误处理,它将显示
try
块中的任何错误。
$table = "tcompany";
try {
$db = new PDO("mysql:dbname=mydb;host=localhost", "root", "" );
$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );//Error Handling
$sql ="CREATE table $table(
ID INT( 11 ) AUTO_INCREMENT PRIMARY KEY,
Prename VARCHAR( 50 ) NOT NULL,
Name VARCHAR( 250 ) NOT NULL,
StreetA VARCHAR( 150 ) NOT NULL,
StreetB VARCHAR( 150 ) NOT NULL,
StreetC VARCHAR( 150 ) NOT NULL,
County VARCHAR( 100 ) NOT NULL,
Postcode VARCHAR( 50 ) NOT NULL,
Country VARCHAR( 50 ) NOT NULL);" ;
$db->exec($sql);
print("Created $table Table.\n");
} catch(PDOException $e) {
echo $e->getMessage();//Remove or change message in production code
}
回答评论使用时的注意事项
CREATE TABLE IF NOT EXISTS
function getsite($site) { if (isset($_GET['site'])) {
include_once('site/'.$_GET['site'].'.php');
}else {
include_once('site/'.$site. '.php'); } }
function makeStatement($query, $array = null) {
try
{
global $con;
$stmt = $con->prepare($query);
$stmt->execute($array);
return $stmt;
}catch(Exception $e)
{
return $e;
}
}
function makeTable($query, $array = null) {
$stmt = makeStatement($query, $array);
if($stmt instanceof Exception)
{
echo $stmt->getCode().': '.$stmt->getMessage();
}else
{
$meta = array();
//Spaltenüberschrift dynamisch
echo '<table class="table">
<tr>';
for($i = 0; $i < $stmt->columnCount(); $i++)
{
$meta[] = $stmt->getColumnMeta($i);
echo '<th>'.$meta[$i]['name'].'</th>';
}
echo '<tr>';
/*
Access to arrayelemet
FETCH_ASSOC:$row['id']
FETCH_NUM: $row[0]
*/
while($row =$stmt->fetch(PDO::FETCH_ASSOC))
{
echo '<tr>';
foreach($row as $r)
{
if(in_array(null, $row))
{
echo '<td style="background-color: red">'.$r.'</td>';
}
else
{
echo '<td>'.$r.'</td>'; //checkboxes for every row /* <input type="checkbox" name="choice[]" value="' . htmlspecialchars($row['row_name']) . '">*/
}
}
echo '<tr>';
}
echo '</table>'; /* echo "<button class='btn btn-primary btn-lg' name='senden' type='submit'>Person auswählen</button> */
</form>";
} }