2017-11-28 11 views
5

特定の名前のテーブルから準備ができた動的コードを作成しようとしていますが、各テーブル名の違いは変数によって生成される数値です:例:テーブル名とmySQLの変数値を連結する方法

//それはだ、私は、例えば値= 3

$pid = $GLOBALS["localid"]; 

//例えばテーブル名がtablename_3

$strTable = "tablename_" .$pid; 

である私の変数を取得する方法//ここでは、クエリは、私がどこかでミスを作ってるんだが、それを把握することはできませんとしてください

+2

aroung単一引用符を持っていることを確認してくださいSQL。クエリを事前定義します。それらを一緒にパッチしないでください! –

+1

あなたの質問をエコーし​​て、問題を簡単に見つけられるようにします –

+0

これを次のように変更します: - '$ query =" SELECT * FROM $ strTable where ..... ";' –

答えて

3

ドットを削除しても、あなたが使用してどのようにされていないことをどこ

$query = "SELECT * FROM $strTable where '.....'; 
0

は、SQLのからに文字列をCONCATないでください少しの助けをいただければ幸いです

$query = "SELECT * FROM . $strTable . where .....; 

のようになります方法です。それぞれのテーブルにクラスを使用しようとすると、tablename変数を解析してクラスをインスタンス化することができます。その内部では、テーブル名を持つプロパティがあります。このようにクエリを作成するのは非常に危険です.SQLインジェクションと呼ばれるものがあり、そのようなコードは招待状です。このコードは、学習して進化させるための生のサンプルにすぎません。

例えば:行うか、またはこのようなあなたのクエリを作成していないについてのコメントのほかに

class atable { 
    $tablename = 'tablename'; 
    $pid = null; 

    public function generateSQL() 
    { 
     $sql = "SELECT * FROM {$this->tablename}"; 

     if (!empty($this->pid) 
     { 
      $sql .= " WHERE idcolumn = {$this->pid} "; 
    } 

    public function setPid($pid) 
    { 
     $this->pid = (integer) $pid; 
    } 
} 

$class = $_POST['tablename-parameter']; 

$table = new $class(); 
$sql = $table->generateSQL(); 

Please read this

+0

として変数をとりますが、これは良いアイデアのようですが、自分のコードに実装するのは簡単ではありません!どこに私が$ pidを追加するかを指定します。例えば!申し訳ありませんが、奇妙な音だけこれを行うために使用されます。 – DirWolf

+0

これは大丈夫です。私があなたに与えたコードから始めて、それから作業してください。 pidの場合は、$ pidプロパティを追加するだけで済みます。パブリックメソッドを設定すると、必要な情報が得られます。 更新された回答をご覧ください。 PHPでプログラミングしたい場合は、OOPをリールする必要があります。それは基本です。http://php.net/manual/en/language.oop5.php – Marco

+0

を読んでください。もちろん、あなたが学んだ後で、コードは準備されたステートメントを使うために再集計することができます。より安全です。 – Marco

1

...

あなたが適切に引用符を閉じていません。

$query = "SELECT * FROM . $strTable . where .....; //Double quote not closed. 

次のようになります。

$query = 'SELECT * FROM' . $strTable . 'where .....'; //Single quoted strings concatenated with variable. 

または

$query = "SELECT * FROM $strTable where ....."; //Variable inside double quoted string. 
関連する問題