Предложение OUTPUT получить возврат в PHP
После некоторого исследования я думаю, что мне нужно предложение Output. По сути, я беру приведенный ниже SQL и вставляю в указанную таблицу, когда получаю местоположение файла, который я загружаю на сервер. Когда я загружаю в таблицу идентификатор, это поле с автоматическим приращением и первичный ключ.
$conn = mysqli_connect($DBHOSTmy, $DBuser, $DBpass, $DBmy) or die("An error occurred connecting to the database " . mysqli_error($conn));
$query = "INSERT INTO ebwf (src,loc,iq,wq,pq) OUTPUT Inserted.id, Inserted.src, Inserted.loc, Inserted.iq, Inserted.wq, Inserted.pq VALUES ('" . $source . "','" . $finalPdf . "','y',0,0);";
echo $query;
$result = $conn->query($query);
echo $result->num_rows;
$conn->close();
Когда это работает, я получаю возврат INSERT INTO ebwf (src,loc,iq,wq,pq) OUTPUT Inserted.src, Inserted.loc, Inserted.iq, Inserted.wq, Inserted.pq VALUES ('m','scan/WF_153_140812113520.pdf','y',0,0);
, но я не получаю возврата числовых строк.
Мне действительно нужен идентификатор прямо в эту минуту вставленной строки, но если мы сможем получить все эти поля, это было бы здорово.
Я в значительной степени скопировал использование предложения OUTPUT из нескольких разных мест, но я не вижу, что я делаю неправильно, чтобы не получить возврат...
Я пытаюсь провести некоторое исследование, когда пишу это, потому что у меня не было хороших ответов, потому что люди думают, что мне этого не хватает, поэтому я также обнаружил: Как мне использовать предложение OUTPUT оператора INSERT, чтобы получить значение идентификатора?... Я изменил свой запрос только на:
$query = "DECLARE @OutputTbl TABLE (id INT, src VARCHAR, loc VARCHAR, iq INT, wq INT, pq INT);
INSERT INTO ebwf (src,loc,iq,wq,pq) OUTPUT Inserted.id, Inserted.src, Inserted.loc, Inserted.iq, Inserted.wq, Inserted.pq INTO @OutputTbl(id, src, loc, iq, wq, pq) VALUES ('" . $source . "','" . $finalPdf . "','y',0,0);";
Я, к сожалению, до сих пор ничего не получаю.. Надеюсь, это даст достаточно информации о том, что мне делать дальше.
1 ответ
@cmorrissey предоставил отличное решение...
$last_insert_id = $conn->insert_id;
Это возвращает последний вставленный идентификатор (я думаю, что первичный ключ, который автоматически увеличивается, является наиболее правильным объяснением.) Это лучше использовать, чем OUTPUT. Я не уверен, почему OUTPUT некорректно использовать, поскольку я видел его так много мест, и это только один раз от пользователя.