كيف يمكنني إنشاء استعلام معلمات PDD مع بيان مثل؟

StackOverflow https://stackoverflow.com/questions/583336

  •  06-09-2019
  •  | 
  •  

سؤال

ها هي محاولتي في ذلك:

$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'];
}

نصائح أخرى

لاستخدام مثل مع٪ مطابقة جزئية يمكنك أيضا القيام بذلك: column like concat('%', :dangerousstring, '%') مع المعلمة المسماة :dangerousstring. وبعد بمعنى آخر، باستخدام علامات٪ غير مريحة بشكل صريح في الاستعلام الخاص بك المنفصل وبالتأكيد ليس إدخال المستخدم.

يحرر: بناء جملة استسلسل بديل وجدته هو استخدام مشغل التسلسل: ||، لذلك سيصبح ببساطة:where column like '%' || :dangerousstring || '%' etc

تضمين التغريدة هنا الذي - التي:

ال صعوبةيأتي عندما تريد السماح حرفيا % أو _ الحرف في سلسلة البحث، دون أن يكون بمثابة عملي البدل.

لذلك هذا شيء آخر مراقبته عند الجمع بين مثل المعلمة والمعلمات.

$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';
}

يمكنك أيضا تجربة هذا واحد. اترك مشكلة مماثلة ولكن حصلت على نتيجة البحث.

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

هذا يعمل:

search `table` where `column` like concat('%', :column, '%')

حصلت على هذا من Deutions

$search = "%$search%";
$stmt  = $pdo->prepare("SELECT * FROM table WHERE name LIKE ?");
$stmt->execute([$search]);
$data = $stmt->fetchAll();

ويعمل لي، بسيط جدا. كما يقول، يجب عليك "إعداد أول حرفي كامل" قبل إرسالها إلى الاستعلام

يناضل PDO "٪" (قد يؤدي إلى حقن SQL): سوف يعطي استخدام الرمز السابق نتائج الرغبة عند النظر إلى مطابقة السلاسل الجزئية لكن إذا كانت هناك أنواع الزوار ذات الحرف "٪"، فستظل تحصل على نتائج حتى إذا لم يكن لديك أي شيء مخزز في قاعدة البيانات (قد يؤدي إلى حقن SQL)

لقد جربت الكثير من التباين كل النتيجة نفسها تندلع نظام تنمية نفط عمان النتيجة "٪" في نتائج البحث غير المرغوب فيها غير المرغوب فيها / غير المرغوب فيها.

أنا على الرغم من أنه كان يستحق المشاركة إذا وجد أي شخص كلمة حولها يرجى مشاركتها

إذا كنت ترغب في القيام بذلك مع PHP وليس في الاستعلام

$string = 'this is a string';
$len = strlen($string);
$first = substr_replace($string, '%', 0,0); // insert % before the first character
$string = substr_replace($first, '%', $len+1,0); // insert % after the last one

ال $string سيكون لها القيمة '%this is a string%'

أنا جعلت وظيفة من ذلك واستخدامها لبيانات بلدي

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top