1

やあみんな、私はPHPが初めてですが、試してみました。現在、私が行うことの要件に変更があります。B1 から B11 までの値は、もはや同じではありません。B1 から B6 または B1 から B50 にすることができます。したがって、値を渡すには配列が必要であることがわかります。ただし、知っておく必要があるのは、それらを $sql ステートメントに含める方法です。B1 から B11 の代わりに変数を使用する必要がありますか? 以下は参考用のコードです。どんな助けでも大歓迎です。

    <?php

    $DB_hostname = "localhost";
    $DB_Name = "root";
    $DB_pass = "pass123";


    if(isset($_GET["slot"])){
       $tableName = $_GET["slot"];
       $db = $_GET["db"];
    }
     echo $tableName;

   $con = mysql_connect($DB_Hostname,$DB_Name,$DB_pass) or die(mysql_error());

   // Create table
   mysql_select_db($tableName = $_GET["slot"];, $con);
   if(mysql_num_rows(mysql_query("SHOW TABLES LIKE $tableName"))==1) {
      echo "Table exists";
   }else {

       echo "Table does not exist";
    // Create table
    mysql_select_db($db, $con);
    $sql = "CREATE TABLE $tableName
    (
    Slot int NOT NULL,
    PRIMARY KEY(Slot),
    B1 TEXT NOT NULL,
    B2 TEXT NOT NULL,
    B3 TEXT NOT NULL,
    B4 TEXT NOT NULL,
    B5 TEXT NOT NULL,
    B6 TEXT NOT NULL,
    B7 TEXT NOT NULL,
    B8 TEXT NOT NULL,
    B9 TEXT NOT NULL,
    B10 TEXT NOT NULL,
    B11 TEXT NOT NULL
   )";
   mysql_query($sql,$con);

   }


   mysql_close($con);
   ?>
4

6 に答える 6

1

このようにしてみてください

IP/file.php?db=dbname&my_arr=B1,B2,B3 のように配列を渡すことができます

$my_cols = explode(',', $_GET['my_arr']);
$sql = "CREATE TABLE $tableName     (
Slot int NOT NULL,
PRIMARY KEY(Slot)";
foreach($my_cols as $col){
    $sql .= " ,`".$col."` TEXT NOT NULL";
}
$sql .= ')';
于 2013-03-07T06:57:50.150 に答える
1
<?php
$con = mysql_connect("localhost", "root", "12345678") or die(mysql_error());
$tableName="new_table";
// Create table
mysql_select_db("spend_track", $con);
if (mysql_num_rows(mysql_query("SHOW TABLES LIKE $tableName")) == 1) {
  echo "Table exists";
} else {

  // Create table
  mysql_select_db($db, $con);
  $sql = "CREATE TABLE $tableName
    (
    Slot int NOT NULL,
    PRIMARY KEY(Slot),
    $filed1 TEXT NOT NULL,
    $filed2 TEXT NOT NULL,
    $filed3 TEXT NOT NULL,
    $filed4 TEXT NOT NULL,
    $filed5 TEXT NOT NULL,
    $filed6 TEXT NOT NULL,
    $filed7 TEXT NOT NULL,
    $filed8 TEXT NOT NULL,
    $filed9 TEXT NOT NULL,
    $filed10 TEXT NOT NULL,
    $filed11 TEXT NOT NULL
   )";
 if(mysql_query($sql, $con)){
   echo "success to create";
 }else{
   echo "failed to create";
 }
}


mysql_close($con);
?>

ここでは、直接値の代わりに変数を使用しています。ファイル名は一意である必要があります。重複することはできません。

于 2013-03-07T07:02:50.187 に答える
1

テーブル内に非常に多くの列が必要な理由がよくわかりません。より良い解決策は、$tableName に 2 つの列のみを持たせることです。1 つはスロット用で、もう 1 つはテーブルが持つスロットの数を定義します。

列はMySQL 内部slotとして設定さauto_incrementれます。これは、行がデータベースに追加されるたびに、数値が増加することを意味します。

次の表には、もともと他の列にあったすべてのデータが含まれます。これには、slot列、position列 (元のテーブルの B$x 列を置き換える)、およびvalueTEXT データが配置される列の 3 つの列があります。

これにより、データベースがリレーショナルになります ( http://en.wikipedia.org/wiki/Relational_modelを参照)

その後、2 つのテーブルで LEFT JOIN を実行して、すべてのデータを取得できます ( http://www.w3schools.com/sql/sql_join.asp ) 。


そうは言っても、現在のソリューションでは、コードの一部を変更するだけで済みます。

if(isset($_GET["slot"])){
   $tableName = $_GET["slot"];
   $db = $_GET["db"];
}
   
//getting the slot count
if (isset($_GET['slots'])) {
   $slots = (int)$_GET['slots'];
}

if (!isset($slots) or !isset($tableName)) {
   echo "Please first provide the right data to this script!";
   exit;
}

// Create the table
$_columns = array();
for ($i = 1; $i <= $slots; $i++) {
    $_columns[] = "B$i TEXT NOT NULL ";
}

$sql = "CREATE TABLE $tableName
(
Slot int NOT NULL,
PRIMARY KEY(Slot),
" . implode( ', ', $_columns) . "
)";
于 2013-03-07T07:02:36.957 に答える
1

すべての B1、B2 値を配列に入れてから、$sqlこのように変数を作成できます。これは、任意の数のエントリに対して機能します。

<?php
$values=array();
$values[]="B1";
$values[]="B2";
$values[]="B3";
$values[]="B4";

$sql = "CREATE TABLE $tableName
    (
    Slot int NOT NULL,
    PRIMARY KEY(Slot)";

    foreach($values as $value)
    {
    $sql.=",
    $value TEXT NOT NULL";
    }
    $sql.=")";


echo $sql;

?>

さらに単純化することもできます。これらの値が常に B で始まり、数値で終わる$count場合は、配列内のすべての B 値を手動で入力するのではなく、単純に変数を実行して何度もループし、それを追加することができます。

于 2013-03-07T06:55:30.263 に答える
0

質問がまったく明確ではないことを認めなければなりません。何をしたいですか?新しいレコードを挿入しますか? テーブルを作成しますか? そして、待ってください、なぜいくつかの要件が変更されたことを知る必要があるのですか?元の要件を知りません;)

ここでまだ注目すべき点が 2 つあります。

  1. mysql_real_escape_string関数で変数をエスケープします。
  2. 使用している MySQL 拡張機能は非推奨であるため、PDOまたはMySQLiを使用することをお勧めします。
于 2013-03-07T06:59:22.027 に答える
0

接続文字列にユーザー情報がありません。次のようになるはずです

mysqli_connect(host,username,password,dbname);
于 2013-03-07T06:57:42.463 に答える