当前位置: 首页 > 知识库问答 >
问题:

mysqli致命错误:查询/准备语句中未使用索引

凌清夷
2023-03-14

我想要使用mysqli执行一个简单的准备好的语句,但它不会工作。

CREATE TABLE IF NOT EXISTS `account` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `email` varchar(100) COLLATE latin1_german2_ci NOT NULL,
  `password` varchar(100) COLLATE latin1_german2_ci NOT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci AUTO_INCREMENT=4 ;
$mysqli = new mysqli($server,$user,$pass,$db);

if(mysqli_connect_errno()) {
    echo "Connection Failed: " . mysqli_connect_errno();
    exit();
 }
 $user = "test@dada.com";
 $pass = "dada";
/* Create a prepared statement */
if($stmt = $mysqli -> prepare("SELECT * FROM account WHERE email=?
AND password=?")) {

  /* Bind parameters
     s - string, b - blob, i - int, etc */
  $stmt -> bind_param("ss", $user, $pass);

  /* Execute it */
  $stmt -> execute();

  /* Bind results */
  $stmt -> bind_result($result);

  /* Fetch the value */
  $stmt -> fetch();

  echo $user . "id of user is " . $result;

  /* Close statement */
  $stmt -> close();
}

/* Close connection */
$mysqli -> close();

致命错误:未捕获异常“mysqli_sql_exception”,消息为“查询/准备好的语句中没有使用索引SELECT*FROM ACCOUNCT WHERE EMAIL=?和password=?‘mysqli_stmt->execute()#1{main}

共有1个答案

卢德惠
2023-03-14

我认为你必须这么做:

CREATE TABLE IF NOT EXISTS `account` (
  `id` PRIMARY KEY int(11) NOT NULL AUTO_INCREMENT,
   // the rest

上面的代码将表的id字段设置为主键,这样它就不会重复自己,它仍然是表的索引。

 类似资料:
  • 问题内容: 当我运行以下代码时,出现错误提示 致命错误:消息“未在查询/准备好的语句中使用索引”的未捕获异常“ mysqli_sql_exception” 这是能干的模式- 问题答案: 看一下这个错误报告: mysqli扩展报告了太多警告 引用笔记的几句话: Mysqli扩展名抛出太多警告。 例如,“ SELECT * FROM table”将导致警告:“警告:mysqli :: query():

  • 问题内容: 这个问题已经在这里有了答案 : mysqli_fetch_assoc()期望参数/调用成员函数bind_param()错误。如何获取并修复实际的mysql错误? (1个答案) 3年前关闭。 我正在努力弄清MySQli,但我对错误报告感到困惑。我正在使用MySQLi’prepare’语句的返回值来检测执行SQL时的错误,如下所示: 但是,prepare语句的返回值是否仅检测SQL语句的前

  • 问题内容: 我有以下代码: 哪个应该工作正常。但是我收到以下错误: 您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册,以获取在’?附近使用的正确语法。第1行的较高(ARTICLE_NAME)喜欢’%?%’‘ 如果我放 该查询工作正常。上面定义了$ table,并且从GET接收了查询,并且两者都是正确的有效值。为什么会失败? 编辑:更改为: 导致错误: 警告:mysqli_stmt :

  • 我正在努力将mysql_results替换为mysqli。有人能帮忙吗。我所需要的只是在下面的代码中更正'mysqli_result($result,'0','theurl')'。当所有东西都使用mysql函数编写时,它就起作用了。但是在我将所有内容转换为mysqli之后,mysql_results转换似乎不起作用了。 当它工作时:echo(mysql_num_rows($query)!==0)?

  • 问题内容: 在mysqli准备好的语句中,NULL变成’‘(对于字符串)或0(对于整数)。我想将其存储为真正的NULL。有什么办法吗? 问题答案: 我知道这是一个旧线程,但是可以将真实的NULL值绑定到准备好的语句(请阅读this)。 实际上,您可以使用mysqli_bind_parameter将NULL值传递给数据库。只需创建一个变量并将NULL值(请参见手册页)存储到该变量并将其绑定即可。无论

  • 问题内容: 我正在尝试准备好的语句,但是下面的代码不起作用。我收到错误消息: 致命错误:在第12行的/var/www/prepared.php中的非对象上调用成员函数execute() 另外,我需要对准备好的语句使用mysqli吗?谁能指出我关于从连接到插入再到带有错误处理的选择的准备好的语句的完整示例? 问题答案: 从文档: 在执行语句或获取行之前,必须使用mysqli_stmt_bind_pa