यहाँ मेरा प्रयास है:
$query = $database->prepare('SELECT * FROM table WHERE column LIKE "?%"');
$query->execute(array('value'));
while ($results = $query->fetch())
{
echo $results['column'];
}
यहाँ मेरा प्रयास है:
$query = $database->prepare('SELECT * FROM table WHERE column LIKE "?%"');
$query->execute(array('value'));
while ($results = $query->fetch())
{
echo $results['column'];
}
जवाबों:
मेरे पोस्ट करने के बाद ही यह पता चला:
$query = $database->prepare('SELECT * FROM table WHERE column LIKE ?');
$query->execute(array('value%'));
while ($results = $query->fetch())
{
echo $results['column'];
}
नामित मापदंडों का उपयोग करने वालों के लिए, यहां MySQL डेटाबेस के लिए आंशिक मिलान के LIKE
साथ कैसे उपयोग किया जाए :%
जहां कॉलम_नाम कॉन्कैट ('%'): खतरनाक, '%')
जहां नामित पैरामीटर है :dangerousstring
।
दूसरे शब्दों में, %
अपनी खुद की क्वेरी में स्पष्ट रूप से अनसैप्ड संकेतों का उपयोग करें जो अलग हो गए हैं और निश्चित रूप से उपयोगकर्ता इनपुट नहीं है।
संपादित करें: ओरेकल डेटाबेस के लिए कॉनटेनटेशन सिंटैक्स कॉन्सेटेशन ऑपरेटर का उपयोग करता है: ||
इसलिए यह बस बन जाएगा:
जहाँ कॉलम_नाम '%' को पसंद करता है || : खतरनाक || '%'
हालाँकि, @bobince उल्लेख के रूप में यहाँ चेतावनी दी गई है कि:
कठिनाई आता है जब आप एक शाब्दिक अनुमति देना चाहते हैं
%
या_
यह एक वाइल्डकार्ड के रूप में कार्य बिना, खोज स्ट्रिंग में चरित्र।
तो जब और जैसे संयोजन के लिए बाहर देखने के लिए कुछ और है।
LIKE CONCAT('%', :something, '%')
। संदर्भ: stackoverflow.com/a/661207/201648
SELECT * FROM calculation WHERE ( email LIKE '%' || luza || '%' OR siteLocation LIKE '%'|| luza ||'%' OR company LIKE '%' ||luza ||'%' )
मुझे त्रुटि मिलेगी।
and it means named placeholders can be used
। जब आप PHP में सम्मिलित होते हैं तो नामित प्लेसहोल्डर्स के साथ भी यह एक समस्या कैसे है? जाहिर तौर पर PHP में कॉन्फैनेटिंग नाम और स्थिति और अधिक पोर्टेबल दोनों का समर्थन करता है क्योंकि आप किसी भी डेटाबेस के लिए एक ही क्वेरी का उपयोग कर सकते हैं। मुझे वास्तव में यह समझ में नहीं आता है कि इतने सारे लोग क्यों सोचते हैं कि नामित और स्थैतिक प्लेसहोल्डर के बीच कोई अंतर है।
$query = $database->prepare('SELECT * FROM table WHERE column LIKE ?');
$query->bindValue(1, "%$value%", PDO::PARAM_STR);
$query->execute();
if (!$query->rowCount() == 0)
{
while ($results = $query->fetch())
{
echo $results['column'] . "<br />\n";
}
}
else
{
echo 'Nothing found';
}
bindValue
इंजेक्शन के हमलों से बचाव करता है ? स्वीकृत उत्तर मूल रूप से पुराने के दिनों में पसंद ?
करने के लिए खोज स्ट्रिंग का उपयोग करके प्लेसहोल्डर्स का उपयोग करने के मूल्य को नकारता है %
।
आप भी इसे आजमा सकते हैं। मैं इसी तरह की समस्या का सामना करता हूं, लेकिन शोध के बाद परिणाम मिला
$query = $pdo_connection->prepare('SELECT * FROM table WHERE column LIKE :search');
$stmt= $pdo_connection->prepare($query);
$stmt->execute(array(':search' => '%'.$search_term.'%'));
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
print_r($result);
पीडीओ "%" से बच जाता है (मई सीक्वल इंजेक्शन के लिए नेतृत्व कर सकता है) : पिछले कोड का उपयोग आंशिक परिणाम का मिलान करने के लिए इच्छा परिणाम देगा, लेकिन अगर कोई आगंतुक चरित्र "%" टाइप करता है तो भी आपको परिणाम मिलेगा भले ही आप डॉन ' t डेटा बेस में कुछ भी संग्रहीत है (यह sql इंजेक्शन का नेतृत्व कर सकता है)
मैंने एक ही परिणाम के साथ सभी भिन्नता की बहुत कोशिश की है पीडीओ "%" बच रहा है जिससे अवांछित / अस्पष्ट खोज परिणाम निकल रहे हैं।
मैं हालांकि यह साझा करने के लायक था, अगर किसी को इसके चारों ओर एक शब्द मिल गया है तो कृपया इसे साझा करें
like
का उपयोग किया जाता है? कैसे क्रम सरणी निष्पादित होना चाहिए?