Classi c ASP Несколько идентификаторов Последний идентификатор не работает - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть несколько кодов статистики, как показано ниже.

Set db = Server.createObject("Adodb.Connection")
db.Open "DRIVER={MySQL ODBC 5.3 Unicode Driver};option=67108864; SERVER=" & mysql_server & "; UID=" & mysql_user & "; pwd=" & mysql_pass & "; db=" & mysql_db & ";"
set rss=db.execute("INSERT INTO boardlar (baslik, hesap_id) VALUES ('Deneme','1');select LAST_INSERT_ID() as lastid from boardlar")

response.write rss("lastid")

Я проверил его на phpmyadmin, и он работает. Но в asp или php это не сработало.

говорит, что не исключает никакое поле из запроса. как я могу решить это?

1 Ответ

1 голос
/ 13 апреля 2020

Скорее всего, это связано с комбинацией флагов OPTION, так как они могут быть объединены. Общее мнение состоит в том, чтобы иметь следующие три флага:

  1. FLAG_FIELD_LENGTH (1) - «Не оптимизировать ширину столбца» 1
  2. FLAG_FOUND_ROWS (2) - «Возвращать совпадающие строки»
  3. FLAG_MULT_STATEMENTS (67108864) - «Поддерживать несколько SQL операторов в пакете»

Когда эти значения объединяются, OPTION значение параметра становится 67108867.

Что означает простое изменение на;

db.Open "DRIVER={MySQL ODBC 5.3 Unicode Driver};option=67108867; SERVER=" & mysql_server & "; UID=" & mysql_user & "; pwd=" & mysql_pass & "; db=" & mysql_db & ";"

1. FLAG_FIELD_LENGTH устарел от разъема ODB C GUI с версии 3.51.18

Другое решение

Похоже, это отсутствие FLAG_FOUND_ROWS в параметрах OPTION, которое вызывает эту конкретную проблему, но в качестве быстрого теста вы можете увидеть, можете ли вы получить доступ к результату запроса через порядковое поле без использования псевдонима, что-то вроде этого;

<%
'Assumed declarations, not setting server, user and pass as you will have these defined.
Dim db, res, mysql_server, mysql_user, mysql_pass

Set db = Server.CreateObject("Adodb.Connection")
db.Open "DRIVER={MySQL ODBC 5.3 Unicode Driver};option=67108864; SERVER=" & mysql_server & "; UID=" & mysql_user & "; pwd=" & mysql_pass & "; db=" & mysql_db & ";"
Set rss=db.execute("INSERT INTO boardlar (baslik, hesap_id) VALUES ('Deneme','1');select LAST_INSERT_ID() as lastid from boardlar")

'Use ordinal positioning instead of field alias to return the value.
Call Response.Write(rss(0))
%>

Полезные ссылки

...