मुझे phs की mysql बेहतर लाइब्रेरी का उपयोग mysql में एक तालिका में एक पंक्ति डालना है जिसमें इसकी प्राथमिक कुंजी प्रकार VARBINARY है। इस क्षेत्र की सामग्री एक गणना sha1 हैश है।PHP- तैयार कथन का उपयोग करके mysql में बाइनरी डेटा डालने
अगर मैं क्वेरी पुराने तरीके से चलाने के यह पूरी तरह काम करता है:
$mysqli->$query("INSERT INTO table (id, field1) VALUES (0x" . $id . ",'" . $field1 . "')");
लेकिन जब मैं एक तैयार बयान के रूप में यह निष्पादित करने के लिए प्रयास करते हैं, मैं इसे कैसे करना है पता नहीं कर सकते हैं।
if($stmt = $mysqli->prepare("INSERT INTO table (id, field1) VALUES (?, ?)")) {
$stmt->bind_param('ss', "0x".$id, $field1);
//execute statement
}
यह कह रही है कि सामग्री इस क्षेत्र के लिए बहुत बड़े थे एक अपवाद फेंकता है: अगर मैं बराबर कार्यवाही नहीं करती। और अगर मैं एक बूँद क्षेत्र के रूप में सम्मिलित करने के लिए प्रयास करें:
if($stmt = $mysqli->prepare("INSERT INTO table (id, field1) VALUES (?, ?)")) {
$stmt->bind_param('bs', $id, $field1);
//execute statement
}
यह कोई त्रुटि देता है, पंक्ति सम्मिलित किया जाता है, लेकिन पहचानकर्ता क्षेत्र अब खाली (शून्य नहीं, खाली) है।
मुझे पता है कि मैं क्वेरी को मिश्रित कर सकता हूं और स्ट्रिंग में अन्य आईडी को तैयार कथन के बाध्य पैरामीटर के रूप में संयोजित कर सकता हूं, लेकिन मैं यह जानने के लिए कह रहा हूं कि इसे सम्मिलित करने का सही तरीका क्या है और शायद भविष्य में किसी की मदद करेगा।
क्या मूल्यों आप $ आईडी के लिए है और $ फ़ील्ड 1 जब आप ऐसा करते हैं की तुलना में बड़ा नहीं है कृपया? $ आईडी एक पूर्णांक है? यदि हां, तो क्या आपने इसे बाध्य करने की कोशिश की है? 'stmt-> bind_param ('is', $ id, $ field1);' – nash
$ id का मान sha1 हैश है। यह एक पूर्णांक नहीं है। अन्य फ़ील्ड समस्या पैदा नहीं कर रहे हैं लेकिन मुख्य रूप से तार हैं। –
प्लस वन इस समस्या को हल करते समय तैयार वक्तव्यों की सुरक्षा को बनाए रखने की कोशिश करने के लिए। – HoldOffHunger