2012-01-23 2 views
0

У меня есть 2 запроса, и я хочу использовать результат первого запроса во втором.
После не работает для меня:Как запустить два sql-запроса, используя результат первого в секунду?

$id  = $_GET['uid']; 
$app_id = $_GET['apid']; 
$sql = "insert into tbl_sc (client_id,status) values ($id,1)"; 
mysql_query($sql) or die ($sql); 
$result = mysql_insert_id(); 
echo $result; 

$sql = "insert into tbl_ms(m_name, ng_ID, status) 
      values ($app_id,$result ,1)"; 
$result = mysql_query($sql) or die ($sql); 

Есть ли другой способ получить тот же результат?

+0

Возвращаемое значение mysql_query(), то есть $ result - это ресурс - какой (т. Е. Какой тип данных) вы хотите вставить в tbl_ms? –

+0

Первый «результат $» - это только ресурс. Если вы не хотите использовать этот '' mysql_insert_id() '' .. –

+3

@EugenRieck Первая переменная '$ result' здесь не является ресурсом. Хотя второй. –

ответ

2

Вы могли бы использовать функцию MySQL LAST_INSERT_ID(). Таким образом, весь этот беспорядок с идентификатором insert исчезнет.

$sql = "insert into tbl_sc (client_id,status) values ($id,1)"; 
if(mysql_query($sql)){ 
    $sql = "insert into tbl_ms(m_name, ng_ID, status) 
       values ($app_id, LAST_INSERT_ID() ,1)"; 
    $result = mysql_query($sql); 
    if($result){ 
     // Process your result 
    }else{ 
     // second query failed! 
     die (mysql_error()); 
    } 
}else{ 
    // first query failed! 
    die (mysql_error()); 
} 
+0

Это прекрасно, но иногда приходится иметь дело со беспорядком в любом случае. Например, если первый INSERT преуспеет, а второй терпит неудачу (и вам нужно знать last-insert_id в вашем коде, например, чтобы повторить попытку) –

+0

@ypercube прямо вы находитесь. Обновленный код немного для этого. –

+0

спасибо, что это сработало! :) – Hia

1

$result содержит ресурс SQL, а не идентификатор.

$insert_id = mysql_insert_id(); 
$sql = "INSERT INTO tbl_ms(m_name, ng_ID, status) 
     VALUES ($app_id, $insert_id, 1)"; 

Не забывайте санировать вход пользователя, чтобы избежать инъекций.

+0

в моем случае содержит автогенерированное число, а ng_ID - значение olso int. – Hia

1

$result в вашем коде всегда будет содержать логическое значение, и если он был успешным, то при использовании в следующем запросе это всегда будет 1. Вы должны указать значение, которое вам нужно, но вы не поймали его в переменной, чтобы его можно было использовать в следующем запросе.

Попробуйте это:

$id = mysql_real_escape_string($_GET['uid']); 
$sql = "INSERT INTO tbl_sc 
      (client_id, status) 
     VALUES 
      ($id, 1)"; 
mysql_query($sql) or die ("MySQL error with query ($sql): ".mysql_error()); 

$app_id = mysql_real_escape_string($_GET['apid']); 
$insertId = mysql_insert_id(); 
$sql = "INSERT INTO tbl_ms 
      (m_name, ng_ID, status) 
     VALUES 
      ($app_id, $insertId ,1)"; 
mysql_query($sql) or die ("MySQL error with query ($sql): ".mysql_error()); 

Вам MUST побега пользовательского ввода перед его использованием в запросе - вы не хотите посетить из Bobby Tables ...

+0

* '$ result' в вашем коде всегда будет содержать логическое *. Неправильно! он будет содержать false, если результат не найден. В противном случае он будет содержать ресурс результата. –

+0

@Shiplu True, если это был запрос, который возвращал результирующий набор. Он будет логическим для 'INSERT' ... – DaveRandom

+0

Приветствуем всех и благодарим за такой быстрый повтор. То, что он сделал, это: сначала echo mysql_insert_id() (он возвращает мне то, что мне нужно), а затем он должен зарегистрировать мой результат во второй таблице. – Hia

1

Сделать переменную $insertedID = mysql_insert_id(); непосредственно перед вторая переменная $sql! И во втором $sql запросить заменить $result на $insertedID

Он должен решить вашу проблему!

1

Во втором запросе просто использовать

insert into tbl_ms(m_name, ng_ID, status) 
      values ($app_id,last_insert_id() ,1) 

нет необходимости играть это через PHP!

+0

попробовал, ее не работает. второй querry не вставляет никаких данных :( – Hia

+0

эхо SQL и опубликовать его, лучше всего включить DESCRIBE tbl_ms –

+0

Что вы подразумеваете под DESCRIBE tbl_ms? – Hia

Смежные вопросы