2009-08-23 12 views
6

उद्धरण "और '? क्या बारे में`? वहाँ विभिन्न उद्धरण का उपयोग करने में एक त्रुटि है' और 'नीचे के बीच क्या अंतर है?PHP: विभिन्न उद्धरण?

$result = pg_query_params($dbconn, 
     'INSERT INTO users 
     (username, email, passhash_md5) 
     VALUES ($1, $2, $3)', 
      array($username, $email, $passhash_md5 
    ) 


     $result = pg_query_params($dbconn, 
      "SELECT user_id 
      FROM users 
      WHERE email = $1", 
      array($email) 
     ) 

उत्तर

18

एकल कोट्स (') का उपयोग करते समय परिवर्तनीय प्रतिस्थापन नहीं किया जाता है, जिसका अर्थ है कि आपके पहले उदाहरण में मान वास्तव में $ 1 $ 2 आदि होंगे यदि यह एक नियमित स्ट्रिंग था और उन्हें बदलने वाले फ़ंक्शन पर नहीं भेजा गया था।

आप चर-substitiution की जरूरत नहीं है, यह प्रदर्शन कारणों से एकल उद्धरण के साथ रहना बेहतर है।

`` खोल इंजन का आह्वान और एक वास्तविक आदेश के रूप में यह आह्वान है, और परिणाम लौटने, बस पर्ल में की तरह। इसलिए, इसका एक अलग अर्थ है।

उदाहरण:

 
$email = '[email protected]'; 
$sql1 = "SELECT user_id FROM users WHERE email = $email"; 
$sql2 = 'SELECT user_id FROM users WHERE email = $email'; 

$ sql1 उपयोगकर्ताओं कहां ईमेल = [email protected]

$ sql2 उपयोगकर्ताओं कहां ईमेल = $ ईमेल

+5

पलायन से चयन user_id होगा से चयन user_id होगा वर्णों को नियंत्रित करने के लिए, \ n और \ t को एकल कोट स्ट्रिंग में भी विस्तारित नहीं किया जाता है। – PhiLho

+1

स्ट्रिंग्स '$ sql1' की तरह हमेशा मुझे चापलूसी करते हैं। आप _really_, उस में एक चर शामिल करने के लिए '{$ ईमेल} का उपयोग करना चाहते हैं' हमेशा मेरी प्राथमिकता हो जाता है। मेरे सामान्य दृष्टिकोण: '" कहां ईमेल = "$ email', जो यह बिल्कुल स्पष्ट यह सचमुच लिया जाना नहीं है कि बनाता है।। – JorenB

+0

बेशक उन तरीकों में से कोई भी एसक्यूएल इंजेक्शन, आप जो भी चर फोन के खिलाफ सुरक्षित कर रहे हैं! ओपी में यह सही है, एकल उद्धरण में pg_query_params के लिए $ 1 et al का उपयोग करके; वास्तव में कोई चर-प्रतिस्थापन वास्तव में नहीं हो रहा है। '$ 1' वाक्य रचना शायद एक छोटे से भ्रामक ... अन्य क्वेरी parameterisation सिस्टम बस का उपयोग '?' है। – bobince

2

सिंगल और डबल उद्धृत तार के बीच अंतर अच्छी तरह से PHP manual about Strings से समझाया गया है।

अपने उदाहरण में, जब से तुम इस तरह के $1 कि कुछ pg_query_params के लिए विशिष्ट मतलब के रूप में और कहा कि प्रतिस्थापन चर का उपयोग कर रहे आप नहीं पीएचपी व्याख्या करने के लिए चर नाम के रूप में, आप अपने एसक्यूएल क्वेरी स्ट्रिंग के लिए एकल उद्धरण का उपयोग करना चाहिए चाहते हैं। का उपयोग करते हुए ' मतलब यह है कि चर के लिए कोई चेकिंग किया जाता है

<?php 
$beer = 'Heineken'; 
echo "$beer's taste is great"; // works; "'" is an invalid character for variable names 
echo "He drank some $beers"; // won't work; 's' is a valid character for variable names but the variable is "$beer" 
echo "He drank some ${beer}s"; // works 
echo "He drank some {$beer}s"; // works 
?> 

(php manual से)

:

2

असल में, " तुम इतनी तरह चर एम्बेड करने देता है।

<?php 
echo '$beer'; 
?> 

आउटपुट $beer होगा।

संबंधित मुद्दे