2017-11-28 17 views
5

Tôi đang cố gắng tạo mã động sẵn sàng từ bất kỳ bảng nào có tên nhất định nhưng sự khác biệt giữa mỗi tên bảng là một số được tạo bởi biến : ví dụ:Cách kết hợp tên bảng với giá trị biến trong mySQL

// đó là cách tôi có được biến tôi giá trị ví dụ là = 3

$pid = $GLOBALS["localid"]; 

// tên bảng ví dụ được tablename_3

$strTable = "tablename_" .$pid; 

// đây là cách truy vấn nên trông giống như

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

Tôi đang làm cho một sai lầm ở đâu đó nhưng không thể tìm ra nó và sẽ đánh giá cao một chút giúp đỡ xin vui lòng

+2

Đó không phải là cách bạn sử dụng SQL. Xác định trước các truy vấn của bạn. Đừng vá chúng lại với nhau! –

+1

echo truy vấn của bạn, để nó sẽ dễ dàng tìm ra vấn đề –

+0

Thay đổi truy vấn của bạn thành: - '$ query =" SELECT * FROM $ strTable nơi ..... ";' –

Trả lời

3

Hủy bỏ các dấu chấm và cũng chắc chắn rằng bạn có dấu nháy đơn aroung nơi

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

Đừng concat chuỗi để từ SQL của. Cố gắng sử dụng có thể là một lớp cho mỗi bảng, theo cách này bạn có thể phân tích cú pháp biến tablename của bạn để khởi tạo một lớp, Bên trong nó bạn sẽ có một thuộc tính với tên bảng. Nó rất nguy hiểm để tạo các truy vấn theo cách bạn đang làm, có cái gì đó gọi là SQL Injection, và một mã như nó là một lời mời. Mã này chỉ là một mẫu thô để bạn học và phát triển nó.

ví dụ .:

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

điều này có vẻ là một ý tưởng tốt nhưng chỉ không dễ dàng cho tôi để thực hiện vào mã của tôi! như tôi sẽ thêm vào đâu. $ pid; ví dụ! xin lỗi nếu âm thanh lạ chỉ không được sử dụng để làm điều này. – DirWolf

+0

Đó là ok, chỉ cần bắt đầu từ mã mà tôi đã cho bạn và làm việc từ nó. Đối với pid bạn sẽ chỉ cần thêm một thuộc tính $ pid, và sau đó bạn có thể tạo ra một phương thức công khai để thiết lập nó, và cứ tiếp tục cho bất kỳ thông tin nào bạn cần. Tìm câu trả lời được cập nhật. Nếu bạn muốn lập trình bằng PHP, bạn CẦN Leart OOP. Đó là những điều cơ bản, vui lòng đọc http://php.net/manual/en/language.oop5.php – Marco

+0

Và tất nhiên, sau khi bạn học, mã có thể được tái xác nhận để sử dụng các câu lệnh đã chuẩn bị, chúng an toàn hơn nhiều. – Marco

1

Bên cạnh những ý kiến ​​về làm hoặc không xây dựng các truy vấn của bạn như thế này ...

Bạn sẽ không đóng dấu ngoặc kép đúng cách.

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

nên là:

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

hoặc

$query = "SELECT * FROM $strTable where ....."; //Variable inside double quoted string. 
Các vấn đề liên quan