2013-02-08 44 views
19

यह एक नौसिखिया गलती होनी चाहिए, लेकिन मैं इसे नहीं देख रहा हूं। यहाँ मेरी कोड से एक टुकड़ा है:php mysqi bind_param चर की संख्या तैयार कथन में पैरामीटर की संख्या से मेल नहीं खाती

$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(); 

जब मैं $ वर्ष के लिए मूल्यों को बाहर गूंज और $, मैं मान देख रहा हूँ, लेकिन जब मैं इस स्क्रिप्ट को चलाने, मैं एक शून्य मान निम्न चेतावनी मिलता है, और मेरी लॉग फ़ाइल में प्रकट होता है:

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

इस मामले में, साल प्रकार int में डेटाबेस (10) में है, और मैं एक प्रति है कि एक पूर्णांक के रूप में कास्ट किया गया था गुजर की कोशिश की है, और बनाने के एक varchar (है 20) utf8_unicode_ci एन्कोडिंग के साथ। क्या मैं कुछ भूल रहा हूँ?

+0

के साथ इस तरह कास्टिंग कर रहे हैं कि आपने ** ** ** bind_param विधि में क्या करने का प्रयास किया है? –

+0

यह $ प्रकार स्ट्रिंग है। "है" को यह इंगित करना चाहिए कि पहला पैरामीटर एक पूर्णांक है और दूसरा एक स्ट्रिंग है। – TMorgan

उत्तर

34

आपका तैयार कथन गलत है, यह होना चाहिए:

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

एकल उद्धरण कि किसने बनाया? मान मार्कर नहीं हो। यह पहले से ही एक स्ट्रिंग होगा क्योंकि आप bind_param('is'

+0

धन्यवाद। वह बिल्कुल था। – TMorgan

+1

अगर यह आपकी समस्या का समाधान करता है तो इसे उत्तर के रूप में चिह्नित करने के लिए मत भूलना। – NoLifeKing