مشکل در پارامتر های URL مطمئن باشید نیگا کردن به این سوال برای همتون مفیده حتی اگه جوابشو بلد نباشید
سلام و درود
تو توسعه یک پروژه به یه مشکل کاملا عجیب و غیرمنطقی برخوردم
من در محیط MySql چنتا فانکشن و پروسیجر دارم که در داخل محیط توسعه ی MySql کاملا و بدون هیچ مشکلی داره کار می کنه و خروجی ها و داده های کاملا درست رو نمایش میدن مشکل زمانیه که من میخوام از طریق WebService و HttpReuqest پارامترهام رو پست کنم که پاسخ مناسب رو البته بهتره بگم داده ی مورد انتظارمو نمایش نمیده تقریبا هر کاری کردم برای برطرف کردنش از تغییر دیکود به دیکودر اسکی در PHP و تغییر کاراکترست (Charset) در محیط پایگاه داده حتی به صورت جداگانه برای هر فیلد تبلهام (Table) و حتی تغییر کاراکترست پارامتر های ورودی توابع بانک اطلاعاتی
خودم به یه چیزیایی شک دارم و اون اینکه آیا این ارسال پارامتر من به SQL اشکال داره مثلا من وقتی تو تابع وب سرویسم پارامتر های ورودی فراخوانی پروسیجر رو به صورت صریح وارد میکنم منظورم اینکه اطلاعات رو از تابع پست URL نخوونه داده های درست رو بهم نشون میده
اما وقتی دارم به تابع وب سرویس می گم داده ها و پارامتر ها رو از تابع post و یا request بخون یعنی بره از آدرس باره مرورگر اون هارو بخوونه بهم داده های غلط میده(من یه رکورد مبهم منظور X ایجاد کردم که به جای نمایش داده های خالی در MySql و json خالی در مرور گر و وب سرویس بهم رکورد مبهم بده که بدونم پارامتر های ورودیم غلطه و یا همچین رکوردی موجود نیست ) منظورم رو پایین بهتون نشون می دم و یا زمانیکه پارمترهامو از نوع عددی هم میدم بهم داده درست رو نشون میده (یک رکورد دارم که ایمیلش عددی و تلقنشم چهار رقمیه نخنیدید ها اینها همش تو دنیای واقعی وجود داره :((((((((((((( ):
<?php
if (isset($_REQUEST['action'])) {
$action = $_REQUEST['action'];
} else {
echo "invalid Data";
exit;
}
switch ($action) {
case "getRecord" :
getRecord($_REQUEST['ID'], $_REQUEST['email'], $_REQUEST['mobile']);
break;
.
.
.
.
default:
echo "Your action select is not true!";
}
FUNCTION getRecord($ID, $Email, $Mobile)
{
$con = mysqli_connect("localhost", "root", "root", "myDB");
/*mb_detect_encoding($ID,"ascii");
mb_detect_encoding($Mobile,"ascii");
mb_detect_encoding($Email,"ascii");*/
mb_convert_encoding($ID, 'ascii');
mb_convert_encoding($Email, 'ascii');
mb_convert_encoding($Mobile, 'ascii');
if (mb_check_encoding($ID, "UTF-8")) {
echo "UTF-8 Yes!!!" . PHP_EOL;
}
if (mb_check_encoding($Email, "UTF-8")) {
echo "UTF-8 Yes!!!" . PHP_EOL;
}
if (mb_check_encoding($Mobile, "UTF-8")) {
echo "UTF-8 Yes!!!" . PHP_EOL;
}
if (mb_check_encoding($ID, "ascii")) {
echo "ascii Yes!!!" . PHP_EOL;
}
if (mb_check_encoding($Email, "ascii")) {
echo "ascii Yes!!!" . PHP_EOL;
}
if (mb_check_encoding($Mobile, "ascii")) {
echo "ascii Yes!!!" . PHP_EOL;
}
if (is_int($ID)) {
echo "ID is Integer Yes!!!" . PHP_EOL;
} else {
echo "ID is not Integer!!!" . PHP_EOL;
}
if (is_int($Email)) {
echo "Email is Integer Yes!!!" . PHP_EOL;
} else {
echo "Email is not Integer!!!" . PHP_EOL;
}
if (is_int($Mobile)) {
echo "Mobile is Integer Yes!!!" . PHP_EOL;
} else {
echo "Mobile is not Integer!!!" . PHP_EOL;
}
//////////////////////////////
if (is_string($ID)) {
echo "ID is String Yes!!!" . PHP_EOL;
} else {
echo "ID is not String!!!" . PHP_EOL;
}
if (is_string($Email)) {
echo "Email is String Yes!!!" . PHP_EOL;
} else {
echo "Email is not String!!!" . PHP_EOL;
}
if (is_string($Mobile)) {
echo "Mobile is String Yes!!!" . PHP_EOL;
} else {
echo "Mobile is not String!!!" . PHP_EOL;
}
//$sql = "SET @p0=''$ID''; SET @p1=''$Email''; SET @p2=''$Mobile''; CALL `getRecord`(@p0, @p1, @p2);";
//$sql = "CALL getRecord(''$ID'',''$Email'',''$Mobile'');";
//$sql = "CALL getRecord(" + "'$ID'" + "," + "'$Email'" + "," + "'$Mobile'" + ");";
//$sql = "CALL getRecord(" + "'$ID'" + "," + "'$Email'" + "," + "'$Mobile'" + ");";
$sql = "CALL getRecord('$ID','$Email','$Mobile');";
if (mysqli_connect_errno()) {
echo "Failed to connect MySQL server" . mysqli_connect_error();
}
mysqli_set_charset($con, "ascii");
$resualt = mysqli_query($con, $sql);
$records = array();
while ($row = mysqli_fetch_array($resualt)) {
$record = array();
$record['ID'] = $row['ID'];
$record['Name'] = $row['Name'];
$record['Family'] = $row['Family'];
$record['BirthDate'] = $row['BirthDate'];
$record['Email'] = $row['Email'];
$record['Mobile'] = $row['Mobile'];
$records[] = $record;
}
echo json_encode($records);
mysqli_close($con);
}
Sql side and procedure code :
DELIMITER $$
CREATE PROCEDURE `getRecord` (IN ID VARCHAR(166) CHARACTER SET ascii, IN EMail VARCHAR(166) CHARACTER SET ascii , IN Mobile VARCHAR(166) CHARACTER SET ascii)
BEGIN
DECLARE CheckMyself VARCHAR(166);
DECLARE CountRecords INT;
SET CheckMe = ( SELECT Count(*) FROM persons WHERE persons.Email = Email AND persons.Mobile = Mobile);
IF CheckMe = 1 THEN
SELECT * FROM persons WHERE persons.ID = ID;
ELSE
SELECT * FROM persons WHERE persons.ID = 'xxxx';
END IF ;
END $$
DELIMITER ;
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .


