सामान्य रूप से मैं PHP के साथ सर्वोत्तम प्रथाओं को देख रहा था, और तैयार वक्तव्य मुझे लगता है कि अब मुझे अपनी आंखों के साथ कैसे करना चाहिए। इसलिए मैंने कुछ उदाहरणों के साथ खेलना शुरू कर दिया।बिस्पाराम में माईस्की तैयार वक्तव्य() काम नहीं कर रहा है
मैं जब स्क्रिप्ट चलाने इस त्रुटि मिल गया है:
Fatal error: Call to a member function bindParam() on a non-object in /opt/lampp/htdocs/phpSecurity/PreparedStatments/Insert-Multi-Binded-Params/Insert Simple Method.php on line 10
यहाँ यह कोड चला जाता है।
सम्मिलित सरल Method.php
<?php
require_once '../config.php';
$stmt = $db->prepare("INSERT INTO coisas (nome, telefone, bi) VALUES (?, ?, ?)");
$nome = 'Fabio Antunes';
$telefone = 916810641;
$bi = 123093456;
$stmt->bindParam(1, $nome);
$stmt->bindParam(2, $telefone);
$stmt->bindParam(3, $bi);
$stmt->execute();
$stmt->close();
$db->close();
?>
config.php
<?php
$server_host = 'localhost';
$server_user = 'root';
$server_password = '';
$server_db = 'PreparedStatements';
$db = new mysqli($server_host, $server_user, $server_password, $server_db);
?>
सुनिश्चित नहीं हैं कि मैं गलत यहाँ क्या कर रहा हूँ, यह समान उदाहरण php.net में पाया है, काम क्यों नहीं कर रहा है? पीएस: मुझे लगता है कि mysqli कनेक्शन समस्या नहीं है क्योंकि मैंने इसे SELECT SQL आदेशों के साथ कुछ तैयार कथन करने के लिए उपयोग किया है। और बहुत अच्छी तरह से काम किया।
संपादित
संकल्प और क्यों।
अच्छी तरह से example में मुझे प्रश्न में प्रत्येक मान के लिए bind_param()
का उपयोग करना चाहिए। लेकिन बार्ट के लिए धन्यवाद, वह मेरे कोड के साथ समस्या को हल करने में कामयाब रहे।
यह कहां है:
$stmt->bindParam(1, $nome);
$stmt->bindParam(2, $telefone);
$stmt->bindParam(3, $bi);
यह होना चाहिए:
$stmt->bind_param("sii", $nome, $telefone, $bi);
जो लोग सोच सकता है कि "SII के लिए"
अब।
अच्छी तरह से bind_param जो मैं देखता हूं उसके लिए प्रत्येक प्रश्न चिह्न "$ var" को बांधता है "?" क्रम में।
तो एक bind_param()
के साथ मैं उन्हें एक ही समय में बांध सकता हूं, और bind_param()
के सामान्य उपयोग को बाध्य होने वाले डेटा के प्रकार को निर्दिष्ट करने की आवश्यकता होती है।
बाध्य होने वाला मेरा पहला मान $nome
एक स्ट्रिंग है, जो "एस" द्वारा निर्दिष्ट है;
और अन्य $telefone
और $bi
इंटीजर हैं जिनके लिए उनके पास "i" है;
अन्य लोगों के लिए जो एक समान समस्या है, यह अन्य डेटा प्रकार (php.net से) चला जाता है।
i = Integer;
s = String;
d = Double;
b = Blob;
यदि कोई बेहतर स्पष्टीकरण के रूप में है तो कृपया इसे पोस्ट करें या टिप्पणी करें। तो मैं अपना खुद का सुधार कर सकता हूं।
धन्यवाद।
सर्वोत्तम अभ्यास के लिए अच्छा सुझाव। मैंने कोशिश की है लेकिन इसने समस्या हल नहीं की है। कोई अन्य विचार? –
$ stmt-> bind_param ("sii", $ nome, $ telefone, $ bi); काम किया। –
इसे Fabio सुनने के लिए अच्छा है। –