我经常遇到想确定一个值是否在表中的情况。查询经常在很短的时间内发生,并且搜索到相似的值,因此我想以最有效的方式执行此操作。我现在拥有的是
if($statment = mysqli_prepare($link, 'SELECT name FROM inventory WHERE name = ? LIMIT 1'))//name and inventory are arbitrarily chosen for this example
{
mysqli_stmt_bind_param($statement, 's', $_POST['check']);
mysqli_stmt_execute($statement);
mysqli_stmt_bind_result($statement, $result);
mysqli_stmt_store_result($statement);//needed for mysqli_stmt_num_rows
mysqli_stmt_fetch($statement);
}
if(mysqli_stmt_num_rows($statement) == 0)
//value in table
else
//value not in table
是否有必要调用所有mysqli_stmt_*
函数?正如在这个问题中所讨论的那样mysqli_stmt_num_rows()
,整个结果集必须从数据库服务器下载。我担心这是一种浪费并且需要很长时间,因为我知道有 1 或 0 行。count()
使用 SQL函数而不用担心会更有效mysqli_stmt_store_result()
吗?还有其他想法吗?
我注意到准备好的语句手册说“准备好的语句或参数化的语句用于高效地重复执行相同的语句”。什么是高效的,它是什么意思?例如,如果两个单独的准备好的语句被评估为相同,它仍然会更有效吗?
顺便说一句,我使用的是 MySQL,但不想添加标签,因为解决方案可能不是 MySQL 特定的。