 |

09-09-2007, 17:54
|
|
|
|
חבר מתאריך: 25.08.03
הודעות: 9,114
|
|
בתגובה להודעה מספר 1 שנכתבה על ידי shuraki שמתחילה ב "br2nl - זקוק לכתוב טקסט שיש בו מעבר שורה ללא ירידת שורה"
תחליף את "\n" ב-'\n'.
קוד PHP:
<?=str_replace(array("\r\n", "\n", "\r"), '\n', $text)?>
הבעיה העיקרית שתהיה לך עם הפתרון בדרך שאתה מחפש זה בעת הזנת השאילתות חזרה.
אם הבנתי טוב, הבעהי שלך אינה זאת שציינת, אלא בדרך בה בחרת ליישם את ה"ייצוא" ו"שחזור" הנתונים אל וממסד הנתונים.
תשפר את פונקציית השיחזור כך שהיא תדע לטפל גם בשאילתות המתפרשות על פני מספר שורות.
אני מצרף כאן קטע קוד שאולי יעזור לך להשלים את המשימה.
קוד PHP:
<?php
function sql_fetch($rowSql)
{
$sql = array();
$rowSql = str_replace(array("\r\n", "\r"), "\n", $rowSql);
for($i=0; $i<strlen($rowSql);)
{
if($rowSql[$i] == "'")
{
do
$pos = strpos($rowSql, "'", ++$i);
while($rowSql[$pos-1] == '\\');
$i = $pos+1;
}
if($rowSql[$i] == '"')
{
do
$pos = strpos($rowSql, '"', $i);
while($rowSql[$pos-1] != '\\');
$i = $pos;
}
else if($rowSql[$i] == '#')
{
$rowSql = str_truncate($rowSql, $i, "\n");
}
else if($rowSql[$i]=='-' && strlen($rowSql)>($i+1))
{
if($rowSql[$i+1]=='-' && ($rowSql{$i+2}==' ' || $rowSql[$i+2]=="\n" || $rowSql[$i+2]=="\t"))
$rowSql = str_truncate($rowSql, $i, "\n");
}
else if($rowSql[$i]=='/' && strlen($rowSql)>($i+1) && $rowSql[$i+1]=='*')
{
$rowSql = str_truncate($rowSql, $i, '*/');
}
else if($rowSql[$i]==';')
{
//array_push($sql, trim(substr($rowSql, 0, $i)));
array_push($sql, str_replace("\n", ' ', trim(substr($rowSql, 0, $i))));// include str_replace("\n", ' ', $query)
$rowSql = trim(substr($rowSql, $i+1));
$i = 0;
}
else
{
++$i;
}
}
if($rowSql = trim($rowSql))
array_push($sql, $rowSql);
return $sql
}
?>
תיאורטית, הפונקציה לעיל אמורה לקבל מחרוזת שהיא שאילתות sql רציפות והפונקציה תחזיר מערך מספרי שכל איבר בה הוא שאילתת sql תקינה.
הפונקציה דורשת שימשו בפונקציה נוספת שאצרף גם אותה תיכף, אני רק חייב לציין ששתי פונקציות אלו הינן פונקציות שכתבתי לפני זמן רב, כך שאני לא לוקח אחריות...
בנוסף, הפונקציה לעיל משמשת אצלי כשיטה במחלקה המיועדת לגיבוי/שיחזור, כך שיתכן מאד שמבהלך ההתאמה המהירה שעשיתי לה כרגע, יצרתי באגים, כדי לבדוק זאת ולא להשתמש בה כמות שהיא (מקסימום ניתן להריץ אותה בנסיון ולבדוק את הפלט).
תעדכן את התוצאות, אויל זה יועיל למשתמשים נוספים.
קוד PHP:
<?php
function str_truncate($str, $a, $z)
{
$str1 = substr($str, 0, $a);
if(is_int($z)){
if($z > $a)
$str2 = substr($str, $z);
else
return false;
}
else if($pos = strpos($str, $z, $a))
$str2 = substr($str, $pos);
else
return false;
return $str1.$str2;
}
?>
|
|