PDA

View Full Version : مشکل در ارتباط با mysql



مهرداد سیف زاده
پنج شنبه 23 آذر 1391, 12:27 عصر
سلام دوستان
یه مشکلی برام پیش اومده که ۲روزه ذهنمو به خودش مشغول کرده.

پایگاه دادم ۳تا جدول داره. users - pages - menu

میخوام اطلاعات صفحه اول مطابق منوی مورد نظر باشه. داخل جدول menu شماره id و نام منو رو قرار دادم و در داخل pages هم فیلدی به اسم menu_id هست. که در واقع ارتباط بین دو جدول بر اساس تعریف idها

حالا کدphp من این هست:

<?php
mysql_query('SET NAMES `utf8`;', $conection);
$MenuSet = mysql_query("SELECT * FROM menu",$conection);
if(!$MenuSet){
die("proplem one conecting table menu<br/>".mysql_error());
}

while($MenuShow=mysql_fetch_array($MenuSet)){
echo $MenuShow["menu_name"]."<br/>";

}
$ContentSet = mysql_query("SELECT * FROM pages WHERE menu_id = {$MenuShow["id"]}");
if(!$ContentSet){
die("proplem two conecting table pages".mysql_error());
}
while($ContentShow=mysql_fetch_array($ContentSet)) {
echo $ContentShow["content"];
}
?>

در قسمت اول منوهارو نمایش میده ولی در قسمت دوم میخواد به شرط برقرار بودن idصفحه با id منو مطالب رو نشون بده اخطار زیر رو میده:

صفحه‌اصلی
مقالات
دانلود
ارتباط با ما
درباره ما
proplem two conecting table pagesYou 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

نمیدونم منظورش از version چیه و کجای کار من اشتباه هست.

mamali-mohammad
پنج شنبه 23 آذر 1391, 13:46 عصر
نام های دیتابیستو بین `` قرار بده مثلا : `pages` یا `menu`
متغیر ها هم بین '' قرار بده مثلا : 'id$'

مهرداد سیف زاده
پنج شنبه 23 آذر 1391, 19:49 عصر
ممنونم برطرف شد
مشکل اینجا بود که برای مقایسه قرار دادن دو جدول مختلف، باید دوباره جدول اول رو quiery می‌کردم تا بتونه جدول دوم رو باهاش مقایسه کنم.
قطعه کد زیر بالای خط ۱۲ قرار می‌گیره

$MenuName = mysql_query("SELECT * FROM menu order by position asc",$conection);
$MenuId = mysql_fetch_array($MenuName);


البته خیلی مبتدی هستم. نکته‌ای رو که گفتید میشه توضیح بدید. آخه هر دو تارو امتحان کردم هم ( " ) گذاشتم کار کرده و هم ( ' ) .
در واقع سوالم اینه فرق سینگل کوتیشن با دابل کوتیشن چیه؟

siavashsay
پنج شنبه 23 آذر 1391, 20:14 عصر
دوست عزیز شما وقتی از کاراکتر ' استفاده میکنی انگار داری رشته رو قطع میکنی !
همیشه سعی کنید نام جدول ها و نام فیلدها رو همیشه بین کاراکتر ` و متغیر ها رو بین کاراکتر ' قرار بدید ! و کل کوئری رو بین " ! به طور مثال :


$sql=mysql_query("SELECT * FROM `tb_name` WHERE `username`='$username'");

همونطور که دوستمون گفتند و اشاره کردند :)

اما برای تمیز نویسی و اینکه سرعت و رفرنس بالاتری داشته باشید سعی کنید مهمات رو داخل " بنویسید و اگر خواستید خیلی بهتر استفاده کنید از کاراکترهای { } هم برای متغیر ها استفاده کنید ! برای مثال :



$sql=mysql_query("SELECT * FROM `tb_name` WHERE `username`='{$username}'");


در نهایت اینطوری خدمت شما عرض کنم که فرق بین کوتیشن و دابل کوتیشن اینه که :

موقعی از دابل کوتیشن " استفاده میکنند که بین اون هم متن و هم متغیر استفاده شه ! مثل :


$name='ali';
echo "Hello $name";


اما اگر متغیر رو داخل کوتیشن ' استفاده کنید دیگه متغیر قابل خودن نیست و اجرا نمیشه : مثل :



$name='ali';
echo 'Hello $name';


پس سعی کنید اگر میخواین متغیری رو همراه با متن ثابت بکار ببرید اون رو داخل " استفاده کنید :)