الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

علامة الاستفهام في mysql لا تعمل عندي

بدأه فاطمة بنت العربي في 11 مايو 2011 · 6 رد · 1,718 مشاهدة · في قواعد بيانات MySQL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة الله و بركاته

الاخوة و الاخوات الافاضل

دون شروح مطولة هذا ما حصل لي :

$reponse=$bdd->query('SELECT password FROM users WHERE username=?');
	$reponse-> execute(array($_POST['username']));

و هذا الخطأ الذي حصلت عليه

Erreur : SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?' at line 1

في اي احد يمكن يساعدني في حل المشكلة بارك الله فيكم؟

#2

هذا سؤال خاص بمنتدى php ، لكن إن أردتيها باستخدام السيرفر mysql يمكنك ذلك عن طريق :

mysql> PREPARE stmt_name FROM "SELECT name FROM Country WHERE code = ?";
Query OK, 0 rows affected (0.09 sec)
Statement prepared

mysql> SET @test_parm = "FIN";
Query OK, 0 rows affected (0.00 sec)

mysql> EXECUTE stmt_name USING @test_parm;

وبالنسبة للكود اللي وضعتيه .. راجعي الرابط الآتي ممكن يفيدك :

http://php.net/manual/en/pdo.prepared-statements.php

تحياتي.

عفواً أحبتي انقطاعي بسبب الدراسة دعواتكم بالتوفيق..

{ لا ينال العلم مستحٍ ولا مستكبر }

#3

علامة "؟" تعتبر بمثابة place holder في بعض الاحيان

ويبدو من شكل الكود لديك انه perl والplace holder هنا علامة الاستفاهم "؟"

والذي يحصل ان الplace holder يتم استبداله بما جاء في execute والذي في هذه الحالة هو

array($_POST['username'])

لذا يجب التحقق هل القيمة المصاحبة لهذا هو المعطى الصحيح الذي يجب وضعه مكان علامة الاستفاهم "؟"

ملاحظة: يوجد

أعضاء في قائمة تجاهلي. لذا عدم ردي عليهم لا يدل على موافقتي الضمية لمحتويات مشاركاتهم.

sigsubway.png

#4

أعتقد إن شكل الكويري يبقى كده

$reponse=$bdd->query('SELECT password FROM users WHERE username=?', $variable);

بمعنى إنك تحطي المتغير بعد الكويري و تفصلي بينهم بفاصلة

#5

لا يعم... انت هكذا قتلت الفائدة من الplace older...

هي فكرته انك تقوم بتمرير قيام مختلفة دون الحاجة الى تمرير الquery كل مرة... يعني الكويري يكون نفسه نفسه (وفيه place holder) وكل مرة تقوم بتمرير القيم التي يجب ان تظهر في query فقط

مثلا

$reponse=$bdd->query('SELECT password FROM users WHERE stuff_field=? AND stuff_field2=?');
my ($stuff, stuff2);

while ($stuff2 < 1000){
	$stuff+=$stuff2;
	$stuff2*=$stuff;
	$reponse-> execute($stuff, $stuff2);
}

تم تعديل هذه المشاركة بواسطة password123 في 13 مايو 2011 في 13:31

1

ملاحظة: يوجد

أعضاء في قائمة تجاهلي. لذا عدم ردي عليهم لا يدل على موافقتي الضمية لمحتويات مشاركاتهم.

sigsubway.png

#6

أظن كلام الأخ " ابن النيل " و Javaprogrammer ، صحيح ، حيث يبدو هذا الكود هو كود Php وتستخدم الأخت ما يشبه الـ prepared statement ، أو PDO حتى يتم منع sql injection

http://php.net/manual/en/book.pdo.php

لذلك أرشح حل الأخ " ابن النيل "و Javaprogrammer كإجابة صحيحة .

@فاطمة : هل هذا كود php ؟ للتأكيد فقط حتى يتم نقله إلى القسم المناسب .

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#7

الله المستعان , للتو رأيت الردود بعد سنة كاملة تقريبا , معذرة على التأخير , نعم اخ شمري هو كود php اسفة لوضعه هنا

لقد انتهينا من المشروع منذ زمن , و تركنا طريقة poo و عدنا الى الطريقة الاساسية لل php بناء على توجيه مبرمج php اخ صديقتي , لاننا مبتدئتين فأوصانا بذلك و لا اذكر حقيقة ما فعلناه لاصلاح هذا الخطأ و الله المستعان , لكن كما قال الاخ هو بمثابة Place holder

اذا كان عندي وقت و بحثت في ذاك المشروع مجددا اوفيكم بالتفاصيل ان شاء الله , بارك الله فيكم على الاجابات النافعة

مواضيع مشابهة