saleh700
یک شنبه 07 شهریور 1395, 23:55 عصر
سلام
من به یک مشکل خیلی عجیب برخورد کردم که در هیچ سایت خارجی هم حتی کسی مشکلی مشابه نداشته که بتونه کمکم کنی لطفا دوستانی که میتونن راهنمایی کنن دریغ نکنن.
من یک دیتابیس mysql دارم که بعضی از کوئری هام رو به صورت پروسیجر داخلش نوشتم و در php اون ها رو صدا میزنم و اجرا میشن و از اون بابت مشکلی نیست.
اما مشکل از اینجا شروع میشه که اگر من در برنامه php خودم از طریق صدا زدن پروسیجر کوری اجرا کنم اون کوئری اجرا میشه اما بعد از اون هر جای برنامه اگه پروسیجری دیگه رو صدا بزنم یا حتی کوئری رو مستقیم اجرا کنم اون کوئری به هیچ وجه رو دیتابیس اجرا نمیشه!
و این برام تبدیل به یک مشکل بزرگ شده براتون نمونه میزارم تا کاملا متوجه منظورم بشید
این یک نمونه پروسیجری که من ساختم:
DELIMITER $$
CREATE PROCEDURE pro_test(IN _phone VARCHAR(20) )
BEGIN
select * FROM user WHERE user_phone=_phone;
END$$
DELIMITER ;
و این هم یک نمونه از کد php من
<?php
require_once("include.php");
$response = "";
$connect = @mysqli_connect($hostname , $username , $password , $database );
if( $connect )
{
$inquery = "CALL pro_test('09123456789')";
$result =@mysqli_query( $connect , $inquery );
$rows = @mysqli_num_rows( $result );
if( $rows > 0 )
{
$getquery = "SELECT * FROM user WHERE user_phone='09123456789'";
$result = @mysqli_query( $connect , $getquery );
if( $result ) // دقیقا اینجا وقتی چک میکنه کوری انجام شده یا نه نتیجه منفیه!
{
$response = "done";
}
else
{
$response = "error";
}
}
else
{
$response = "not found";
}
}
else
{
$response = "not connect!";
}
die( json_encode($response) );
?>
در کد بالا وقتی من کوئری اول رو با پروسیجر اجرا میکنم با اینکه کوری اول درست اجرا میشه و شرط بر قرار میشه ولی کوری دوم شکست میخوره و هیچی بر نمیگردونه این در صورتیه که اگه کوری اول رو رو به صورت عادی یعنی به شکل زیر بنویسم مشکل بر طرف میشه!
$inquery = "select * FROM user WHERE user_phone=09123456789";
من به یک مشکل خیلی عجیب برخورد کردم که در هیچ سایت خارجی هم حتی کسی مشکلی مشابه نداشته که بتونه کمکم کنی لطفا دوستانی که میتونن راهنمایی کنن دریغ نکنن.
من یک دیتابیس mysql دارم که بعضی از کوئری هام رو به صورت پروسیجر داخلش نوشتم و در php اون ها رو صدا میزنم و اجرا میشن و از اون بابت مشکلی نیست.
اما مشکل از اینجا شروع میشه که اگر من در برنامه php خودم از طریق صدا زدن پروسیجر کوری اجرا کنم اون کوئری اجرا میشه اما بعد از اون هر جای برنامه اگه پروسیجری دیگه رو صدا بزنم یا حتی کوئری رو مستقیم اجرا کنم اون کوئری به هیچ وجه رو دیتابیس اجرا نمیشه!
و این برام تبدیل به یک مشکل بزرگ شده براتون نمونه میزارم تا کاملا متوجه منظورم بشید
این یک نمونه پروسیجری که من ساختم:
DELIMITER $$
CREATE PROCEDURE pro_test(IN _phone VARCHAR(20) )
BEGIN
select * FROM user WHERE user_phone=_phone;
END$$
DELIMITER ;
و این هم یک نمونه از کد php من
<?php
require_once("include.php");
$response = "";
$connect = @mysqli_connect($hostname , $username , $password , $database );
if( $connect )
{
$inquery = "CALL pro_test('09123456789')";
$result =@mysqli_query( $connect , $inquery );
$rows = @mysqli_num_rows( $result );
if( $rows > 0 )
{
$getquery = "SELECT * FROM user WHERE user_phone='09123456789'";
$result = @mysqli_query( $connect , $getquery );
if( $result ) // دقیقا اینجا وقتی چک میکنه کوری انجام شده یا نه نتیجه منفیه!
{
$response = "done";
}
else
{
$response = "error";
}
}
else
{
$response = "not found";
}
}
else
{
$response = "not connect!";
}
die( json_encode($response) );
?>
در کد بالا وقتی من کوئری اول رو با پروسیجر اجرا میکنم با اینکه کوری اول درست اجرا میشه و شرط بر قرار میشه ولی کوری دوم شکست میخوره و هیچی بر نمیگردونه این در صورتیه که اگه کوری اول رو رو به صورت عادی یعنی به شکل زیر بنویسم مشکل بر طرف میشه!
$inquery = "select * FROM user WHERE user_phone=09123456789";