עזרה ב-PHP בעבודה מול מסד נתונים - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

עזרה ב-PHP בעבודה מול מסד נתונים


orlupo

Recommended Posts

הקוד הבא אמור לקחת את המחרוזת str שנשלחה ע"י טופס ב-HTML ולחפש אותה במסד נתונים:

<?
define("link","\n\n<a href='search.html'>Click here to return to search page.</a>");
$str = trim($str);

if(!$str){
echo "There isn't a match result.".link;
exit;
}

$db = mysql_connect("localhost");
mysql_select_db(temp, $db);

$query = "SELECT * FROM phonebook WHERE str LIKE '%str' OR 'str%'";
$result = mysql_query($query, $db);

while($print = mysql_fetch_row($result))
for($i=0;$i<count($print);$i++)
echo "$print[$i]\n";
?>

משום מה השרת מחזיר את השגיאה:

Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource on line 26

מישהו יכול לעזור לי לפתור את הבעיה הזו?

בתודה מראש

קישור לתוכן
שתף באתרים אחרים

  • תגובות 42
  • נוצר
  • תגובה אחרונה

הקוד הבא כן עבד לי עם אותו מסד נתונים:

<?
$db = mysql_connect ("localhost");
mysql_select_db (lupo_temp,$db);

$query = "SELECT * FROM phonebook";
$result = mysql_query($query);
$j=1;

while($temp = mysql_fetch_assoc($result)){
echo ($j++)."<br>";

while($print = each($temp))
echo "$print[key]: $print[value]<br>";

echo "<br>";
}
?>

קישור לתוכן
שתף באתרים אחרים

כמו שאמרתי, כנראה שה QUERY שנתת לו לא תקין (מבחינת סינטקס או תוכן) בחלק הראשון ובגלל זה הוא מחזיר FALSE. תריץ

http://il.php.net/mysql_error

אחרי כן כדי לראות מה השגיאה שה SQL נותן על השאילתה, אחרי ה MYSQL_QUERY.

נ.ב. כל הכבוד על העריכה :)

קישור לתוכן
שתף באתרים אחרים

אני לא מבין למה אתה מצפה ש-mysql_connect יחזיר לך את הדטאבייס...

הקוד שלך פשוט לא נכון, mysql_connect מחזיר סתם handler בשביל שתוכל לעשות לו mysql_close אח"כ אם בא לך..

אתה תמשיך לקבל שגיאת no database selected עד שתגדיר אחד.. :P

הנה שתי פונקציות בסיסיות שלי לעבודה מול MySQL:

function db_connect()
{
global $DBhost,$DBuser,$DBpass,$DBname;

mysql_connect($DBhost,$DBuser,$DBpass) or die("Unable to connect to database");
mysql_select_db($DBname) or die("Unable to connect to database");
}


function db_query($sql_query)
{
$result = mysql_query($sql_query) or die("Invalid query: " . mysql_error() . "<br>Query: " . $sql_query);
return $result;
}

עכשיו זה מאוד פשוט להשתמש בזה.

פשוט תגדיר קודם כל את כל המשתנים הגלובלים, ואז תשתמש ב- db_connect() בתחילת התוכנית, וב- db_query($sql_query) בכל query שאתה רוצה לבצע..

אפשר להוסיף ל-db_query גם קאונטר (משתנה גלובלי מן הסתם) שיספור את מספר ה-queries בעמוד..

קישור לתוכן
שתף באתרים אחרים

ד"א לעבודה שפויה מול מסדי נתונים, ממליץ על DB_DataObject

http://pear.php.net/package/DB_DataObject

http://pear.php.net/manual/en/package.database.db-dataobject.php

פשוט הרבה יותר קל/נוח לעבוד עם אוביקטיים מסוג שדות בטבלה (כמובן שזה הכל תלוי בשימושים ובדרישות ומגבלות של המערכת).

קישור לתוכן
שתף באתרים אחרים

כן, עכשיו בדיוק באתי לכתוב על זה.. עכשיו שמתי לב שאתה לא מצפה מ-$db להיות הדטאבייס, אלא מ-temp.. לא שמתי לב לזה קודם כי לא שמת את זה במרכאות (גרוע מאוד..).

דרך אגב, למה אתה עושה:

LIKE '%str' OR 'str%'

???

מה רע ב:

LIKE '%str%'

?

אה, ה-query שלך לא משתמש בכלל במשתנה!

זה $str, לא str....

תעשה:

$query = "SELECT * FROM phonebook WHERE str LIKE '%" . $str . "%'";

ותוסיף אחרי ה-mysql_query:

if (!$result) {
die('Invalid query: ' . mysql_error());
}

הרי מה שאתה מקבל זאת לא שגיאה, זאת אזהרה. לדעתי בגלל ש-$results החזיר FALSE (הרי הוא לא מצא "str", שזה כאמור היה אצלך בתור סטרינג ולא בתור משתנה) ו-mysql_fetch_row לא ידע להתמודד עם זה (כלומר, ידע, אבל פלט אזהרה).

בקוד השני שנתת זה כמובן עבד כי ה-query היה ללא שום where..


נ.ב.

מצטער על הטעויות השטותיות ומיליון העריכות.. אני כבר לא מתפקד בשעות כאלה אחרי שאני חוזר מהעבודה.. :P

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.


×
  • צור חדש...