2009-09-26 67 views
6

Tôi có tập lệnh PHP và vì một số lý do mysql tiếp tục xử lý giá trị để chọn/chèn dưới dạng cột. Dưới đây là một ví dụ về truy vấn sql của tôi:MySQL: Cột không xác định trong trường hợp lỗi số

$query = mysql_query("SELECT * FROM tutorial.users WHERE (uname=`".mysql_real_escape_string($username)."`)") or die(mysql_error()); 

Đó biến thành:

SELECT * FROM tutorial.users WHERE (uname=`test`) 

Các lỗi là:

Unknown column 'thử nghiệm' trong 'nơi khoản'

Tôi cũng đã thử:

SELECT * FROM tutorial.users WHERE uname=`test` 

Trả lời

9

Lạ? Làm thế nào? Nó nói chính xác những gì sai. Không có cột 'thử nghiệm' nào trong bảng của bạn. Bạn có chắc là bạn có bảng đúng không? 'tutorial.users'? Bạn có chắc bảng không được đặt tên khác không? Có lẽ bạn có nghĩa là để làm

SELECT * from users WHERE uname = 'test'; 

Bạn cần phải tham khảo chỉ có tên bảng, không phải là cơ sở dữ liệu .. giả sử cơ sở dữ liệu được đặt tên tutorial

+0

công trình bây giờ, nhờ – user169551

+0

Vâng tôi nghĩ anh ấy sẽ bổ sung tên của cơ sở dữ liệu trong truy vấn .. hoặc có thể ông muốn chọn tutorial.users từ những người dùng nơi uname = 'test'; – halocursed

+0

np. đừng quên chọn câu trả lời :) và chào mừng bạn đến với Stackoverflow. –

34

Trong MySql, backticks chỉ ra rằng một indentifier là một tên cột. (RDBMS khác sử dụng dấu ngoặc kép hoặc dấu ngoặc kép cho điều này).

Vì vậy, truy vấn của bạn là "cung cấp cho tôi tất cả các hàng có giá trị trong cột có tên 'uname' bằng giá trị trong cột có tên 'test'". Nhưng vì không có cột có tên kiểm tra trong bảng của bạn, bạn nhận được lỗi mà bạn nhìn thấy.

Thay thế backticks bằng dấu nháy đơn.

+4

oh, do đó, đó là lời giải thích thực sự;) –

4

dụ:

$uname = $_POST['username']; 
$sql="SELECT * FROM Administrators WHERE Username LIKE '$uname'" 

Lưu ý các dấu nháy đơn xung quanh $ uname. Khi bạn echo truy vấn, đây là output-

SELECT * FROM Administrators WHERE Username LIKE 'thierry' 

Tuy nhiên nếu bạn bỏ lỡ quote quanh $ uname biến trong truy vấn của bạn, đây là những gì bạn sẽ GET

SELECT * FROM Administrators WHERE Username LIKE thierry 

On MySQL máy chủ, 2 truy vấn khác nhau. thierry là chuỗi đầu vào và được đóng gói một cách chính xác trong các dấu ngoặc kép, như trong truy vấn thứ hai, nó không phải là, gây ra lỗi trong MySQL.

Tôi hy vọng điều này sẽ giúp và tha Englis của tôi mà không phải là rất tốt

+0

Câu trả lời hay. Giúp tôi hiểu rõ hơn khi nào nên sử dụng 'và khi nào thì không. Cảm ơn –

0

tôi đã cùng một vấn đề và nó bật ra được một lỗi đánh máy. thông báo lỗi của tôi là:

Unknown column 'departure' in 'where clause' 

Tôi đã kiểm tra rằng cột rất trong bảng của tôi và nó chỉ ra rằng, tôi đã đánh vần nó như là "depature" và KHÔNG "khởi hành" trong bảng, do đó ném được thông báo lỗi.

sau đó tôi đã thay đổi truy vấn của tôi để:

Unknown column 'depature' in 'where clause' 

và nó làm việc!

Vì vậy, lời khuyên của tôi rõ ràng là, hãy kiểm tra kỹ xem bạn đã viết đúng tên cột chưa.

Tôi hy vọng điều này sẽ hữu ích.

0

Tôi cũng phải đối mặt với vấn đề "Cột không xác định trong mệnh đề where" khi thực hiện lệnh sau từ dòng lệnh linux (bash).

mysql -u support -pabc123 -e 'select * from test.sku where dispsku='test01' ; ' 

Đây là những gì tôi nhận

ERROR 1054 (42S22) at line 1: Unknown column 'test01' in 'where clause' 

tôi đã phải thay thế các dấu nháy đơn 'test01' với dấu ngoặc kép "test01". Nó làm việc cho tôi. Có một sự khác biệt như thế nào và cách bạn đang thực hiện các truy vấn sql.

Khi gán giá trị cho biến trong tập lệnh và sau đó, sử dụng biến đó trong câu lệnh sql phải được thực thi bởi tập lệnh, có sự khác biệt nhỏ.

Nếu biến giả sử là

var=testing 

và bạn muốn vượt qua giá trị này từ bên trong kịch bản để mysql, dấu ngoặc kép sau đó đơn làm việc.

select '$var' 

Vì vậy, các công cụ khác nhau có thể đánh giá các dấu gạch chéo và dấu ngoặc kép khác nhau.

Đây là truy vấn của tôi hoạt động từ dòng lệnh linux.

mysql -u support -pabc123 -e 'select * from test.sku where dispsku="test01" ; ' 
Các vấn đề liên quan