2013-02-08 25 views
19

Điều này phải là lỗi của người mới, nhưng tôi không thấy nó. Dưới đây là một đoạn trích từ mã của tôi:Php mysqi bind_param Số biến không khớp với số tham số trong câu lệnh đã chuẩn bị

$mysqli = mysqli_connect($dbCredentials['hostname'], 
    $dbCredentials['username'], $dbCredentials['password'], 
    $dbCredentials['database']); 

if ($mysqli->connect_error) { 
    throw new exception('Connect Error (' . $mysqli->connect_errno . ') ' 
    . $mysqli->connect_error); 
} 

$stmt = $mysqli->prepare("SELECT DISTINCT model FROM vehicle_types 
    WHERE year = ? AND make = '?' ORDER by model"); 

$stmt->bind_param('is', $year, $make); 

$stmt->execute(); 

Khi tôi echo ra các giá trị cho $ năm và $ make, tôi nhìn thấy giá trị, nhưng khi tôi chạy kịch bản này, tôi nhận được một giá trị null, và cảnh báo sau xuất hiện trong tập tin đăng nhập của tôi:

PHP Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement 

trong trường hợp này, năm là trong cơ sở dữ liệu trong kiểu int (10), và tôi đã cố gắng đi qua một bản sao đã được chọn vào vai một int, và chắc là một varchar (20) với mã hóa utf8_unicode_ci. Tui bỏ lỡ điều gì vậy?

+0

Bạn đã cố gắng làm gì với điều đó ** là ** trong phương thức bind_param? –

+0

Đây là chuỗi $ loại. "Là" nên biểu thị rằng tham số đầu tiên là một số nguyên và tham số thứ hai là một chuỗi. – TMorgan

Trả lời

34

tuyên bố chuẩn bị của bạn là sai, nó phải là:

$stmt = $mysqli->prepare("SELECT DISTINCT model FROM vehicle_types WHERE year = ? AND make = ? ORDER by model"); 

Các dấu nháy đơn thực hiện mà? là giá trị không phải là điểm đánh dấu. Nó sẽ là một chuỗi bởi vì bạn đang đúc như vậy với bind_param('is'

+0

Cảm ơn bạn. Đó là chính xác. – TMorgan

+1

Đừng quên đánh dấu đây là câu trả lời nếu nó giải quyết được vấn đề của bạn. – NoLifeKing

Các vấn đề liên quan