Tôi đang viết mã cho bảng sắp xếp, trong đó nhấp vào liên kết trong tiêu đề thay đổi ORDER BY được thực hiện khi tạo tập hợp kết quả tìm kiếm (trường hợp không có thứ tự hợp lệ theo nguyên nhân truy vấn không được chạy theo thứ tự bởi và chỉ trả về kết quả theo thứ tự cơ sở dữ liệu trả về. điều này được thiết kế). Mã này được viết trong khuôn khổ do nhà tuyển dụng của tôi cung cấp.Hành vi lẻ trong câu lệnh chuyển đổi
Để xác thực phần ORDER BY của truy vấn, tôi chạy đầu vào thông qua hàm xác thực sau.
<?php
function sortMode ($name)
{
$mode = '';
switch ($name)
{
case 'resnum' : $mode = 'b_resnum'; break;
case 'state' : $mode = 'st_id'; break;
case 'name' : $mode = 'lastname, firstname'; break;
case 'phone' : $mode = 'phone'; break;
case 'email' : $mode = 'email'; break;
case 'opened' : $mode = 'cs_created'; break;
default : $mode = ''; break;
}
return ($mode);
}
?>
Đang thử nghiệm Tôi phát hiện ra rằng nếu không có tham số nào được cung cấp thì thứ tự sắp xếp sẽ được tiếp tục. Sau khi thử nghiệm một số, tôi phát hiện ra rằng bộ lọc được xây dựng trong khung sẽ gây ra một yêu cầu cho một biến uninitialized chẳng hạn như một tham số GET unset để trả về số nguyên 0. Nếu mã trên được cho ăn 0 số nguyên như đầu vào, nó sẽ luôn luôn theo sau con đường thực hiện có sẵn cho nó.
Theo một thử nghiệm tôi đã cố gắng sắp xếp lại thứ tự của các trường hợp trong câu lệnh switch, và tìm thấy bất cứ điều gì là ở phía trên sẽ là những gì đã được thực hiện nếu chức năng này đã được thông qua một 0.
Giải pháp cho vấn đề là sử dụng switch (strval($name))
để vấn đề cụ thể được giải quyết, nhưng bây giờ tôi tò mò về hành vi chung của các câu lệnh chuyển đổi PHP. Liệu hành vi tôi đã chứng kiến hành vi đúng đắn của PHP? Có một số lỗi trong PHP đó gây ra điều này, hoặc tôi đã thực hiện một lỗi trong mã của tôi mà tôi không biết?
+1 dang! Đây là hành vi nguy hiểm. –
PHP có thể là tà ác thuần túy. Việc chuyển đổi int tự động này đã gây ra nhiều thất vọng hơn thời gian "đã lưu". – GWW
Ít nhất trong một nếu có thể sử dụng === và ngăn chặn điều này, nhưng tiếc là chuyển đổi/trường hợp là một == – UnkwnTech