PDA

View Full Version : کمک برای حل یک مشکل عجیب در استفاده از procedure در php



saleh700
یک شنبه 07 شهریور 1395, 22: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";

rambod18
یک شنبه 07 شهریور 1395, 23:37 عصر
کاکنکشن اولی رو close کن از یک کانکشن دیگه استفاده کن

numberone1
دوشنبه 08 شهریور 1395, 03:35 صبح
اینم شاید جواب بده بعد از اجرای پروسیجر



mysqli_free_result();
mysqli_next_result($mysqli);

saleh700
دوشنبه 08 شهریور 1395, 15:06 عصر
کاکنکشن اولی رو close کن از یک کانکشن دیگه استفاده کن
این مورد رو تست کرد حق با شماست مشکل برطرف میشه اما دلیل بروز این مشکل چیه؟ راه دیگه ای برای حلش وجود نداره؟
مواقعی پیش میاد که ما باید کوری ها رو داخل ترنزکشن بزاریم در اونصورت نمیتونیم برای هر کوری یک کانکشن جید باز کنیم

saleh700
دوشنبه 08 شهریور 1395, 15:08 عصر
اینم شاید جواب بده بعد از اجرای پروسیجر

ممنون ولی این روش هم جواب نداد

saleh700
دوشنبه 08 شهریور 1395, 18:03 عصر
مشکل حل شد و راه حل هم همونی بود که numberone1 گفتند منتهی من وقتی کدهامو روالی نوشتم جواب نداد و یک بار دیگه کدهام رو اینبار به روش شیگرایی نوشتم و دستوری که دوستمون گفت رو هم بعد از کوری اول قبل از تمام کوری های بعدی قرار دادم درست شد.

$connect->next_result();