Tôi hiện có một mẫu tìm kiếm nhỏ chỉ có hai phần tử: một kiểu nhập văn bản có tên là search
và hộp "chọn" có tên param
. Tùy chọn được chọn trong hộp đó nên được sử dụng làm tham số để chọn cột bảng nào trong DB của tôi sẽ được tìm nạp.Làm thế nào tôi có thể chuyển một biến đến một mệnh đề WHERE bằng cách sử dụng mysqli?
Sử dụng mysql_
chức năng, một cái gì đó như thế này có thể được thực hiện:
$param = $_POST['param' ];
$search = $_POST['search'];
$query = 'SELECT * FROM table WHERE $param LIKE "%$search%"';
Nhưng tôi không thể có được nó để làm việc với các cú pháp mysqli_
. Tôi cố gắng để sử dụng chuẩn bị phát biểu, nhưng tốt nhất mà tôi đã làm cho đến nay là thế này:
$param = $_POST['param' ];
$search = $_POST['search'];
if($param == 'first_name')
{
if($prep = $link->prepare('SELECT * FROM table
WHERE first_name
LIKE CONCAT("%", ?, "%")'))
{
$prep->bind_param('s', $search);
$prep->execute();
$prep->bind_result($first_name, $last_name);
while($prep->fetch())
echo $first_name . ' ' . $last_name;
$prep->close();
}
else
echo 'Error while preparing statement.';
}
else if($param == 'last_name')
{
...
}
Nhưng chỉ sử dụng một loạt các else if
s vẻ như rất nhiều lặp đi lặp lại và không hiệu quả, đặc biệt nếu tôi có rất nhiều cột để xử lý.
Điều đầu tiên tôi đã thử là ràng buộc tham số - ... WHERE ? LIKE ...
và $prep->bind_param('ss', $param, $search)
-, nhưng nó không hoạt động (và tôi vẫn không biết tại sao).
Có cách nào để làm điều đó một cách thông minh hơn không?
+1 để định dạng tốt câu hỏi của bạn –
.... WHERE ". $ Param." LIKE ....nói chung những gì tôi làm với câu lệnh sql – Adsy2010
Bạn không thể sử dụng trình giữ chỗ cho tên cột theo như tôi biết, đó là lý do tại sao nó không hoạt động. –