עבור לתוכן

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

Featured Replies

פורסם

הקוד הבא אמור לקחת את המחרוזת 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
  • צפיות 3.1k
  • נוצר
  • תגובה אחרונה
פורסם

נראה כאילו ה MYSQL_QUERY מחזיר FALSE בגלל שגיאה בשאילתה ועל כן הוא לא יודע מה לעשות עם הערך המוחזר.

פורסם
  • מחבר

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

<?
$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.

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

פורסם
  • מחבר

טוב, עשיתי והוא החזיר לי את השגיאה:

No database selected

מזה יכול להיות? :-X

הרי נבחר מסד נתונים... :'(

פורסם

אתה צריך להגדיר את היוזר/ססמא וכל שאר הירקות ב MYSQL_CONNECT

ומה זה ה TEMP הזה שאתה מעביר ב MYSQL_SELECT_DB ? אולי אתה מתכוון $TEMP או משהו?

פורסם
  • מחבר

השם משתמש והסיסמא מועברים אבל ללא מרכאות אני ינסה עם.

וה-lupo_temp זה השם של המסד נתונים.

פורסם

אז זה צריך לעבור במרכאות לא ? (כמו שכל ה STRINGS צריכים)

פורסם
  • מחבר

ממ בדקתי בPHP.NET וצריך לעבור במרכאות גם השם משתמש, גם הסיסמא וגם שם מסד הנתונים.

תיקנתי את זה וגם לא עזר, עדיין אותה שגיאה.

פורסם

צריך שהכל יהיה במרכאות (כל המחרוזות), גם ה TEMP ו LUPO_TEMP ומה לא שאתה מעביר...

פורסם

אני לא מבין למה אתה מצפה ש-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

פורסם
  • מחבר

אני חושב שבמצב כזה הוא לא יגיב למחרוזת כמו 'abcd' (אם abc הוא הערך שנשלח).

ארכיון

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

דיונים חדשים