(如果有必要道歉 - 我的第一个Stack Overflow问题.如果有人有建议,我会很乐意修改它.我已经找到了答案,但我担心我对术语的掌握不够好,无法完成搜索.)
我习惯使用mysql_fetch_array从数据库中获取记录.当以这种方式获取记录时,mysql_num_rows给出了行数.但是,在我当前的项目中,我正在使用mysql_fetch_object.mysql_num_rows似乎不适用于此函数,当我对查询结果进行"计数"时,我得到了预期的答案:1(一个对象).
有没有办法'看到'对象并计算其中的元素?
我SELECT在PHP页面上有几个语句,我使用Dreamweaver生成这些语句.
在完成它生成的代码之后,似乎有很多可以在大多数情况下切掉的绒毛,mysql_num_rows()每个语句的一行都是一个例子.
所以我想知道是否有人可以告诉我这是否实际上节省了资源 - 考虑到查询是否正在运行,是否有任何实际开销?
更新:在遵循Chriszuma关于microtime的建议之后,以下是我的结果:
//time before running the query
1: 0.46837500 1316102620
//time after the query ran
2: 0.53913800 1316102620
//time before calling mysql_num_rows()
3: 0.53914200 1316102620
//time after mysql_num_rows()
4: 0.53914500 1316102620
Run Code Online (Sandbox Code Playgroud)
所以似乎没有多少开销
我试图在laravel中使用mysql_num_rows,但laravel说它与'raw php'不一样
例:
$users = DB::table('users')
->where('username', '=', $username)
->where('password', '=', $password)
->get();
Run Code Online (Sandbox Code Playgroud)
我想做的事:
$count = mysql_num_rows($users);
if($count > 0 ){
$user->login = $request->login;
$user->email = $request->email;
$user->password = $request->password;
Auth::login($user);
return redirect("/");
}else{
return "datos incorrectos";
}
Run Code Online (Sandbox Code Playgroud)
什么laravel说:
Call to undefined function App\Http\Controllers\Auth\mysql_num_rows()
Run Code Online (Sandbox Code Playgroud)
PD:它不是代码哲学只是为了对这个问题做出评价,我不想要像"你要加密这个东西吗?","为什么不使用[插入我的法布里特ORM]"这样的答案只是一个简单的问题谢谢
首先,我想告诉您,我已经解决了所有重复的问题。并尝试了那里建议的更改。
到目前为止,我已经尝试更改num_rows为num_rows()
And using store_result();And using affected_rows()。
store_result();之后还打电话execute()
我认为可能还有其他一些我无法弄清楚的问题
$conn->autocommit(false);
if ($sucess){
$stmt2 = $conn->prepare("UPDATE e_eventqueue SET e_urlfil=? WHERE e_id=?
AND u_id=?");
$stmt2->bind_param("iis",$e_urlfil,$e_id,$u_id);
if($stmt2->execute()){
$stmt2->store_result();
echo "true";
echo $stmt2->num_rows; // <- this always return 0 even when its not
$stmt2->close();
$conn->commit();
}
else{
$conn->rollback();
echo "rollback";
}
}
Run Code Online (Sandbox Code Playgroud) 我已经构建了一个利用PHP内置MySQLi类功能的类,它旨在简化数据库交互.但是,使用OOP方法,在运行查询后,num_rows实例变量返回正确的行数时遇到困难.看看我班上的快照......
class Database {
//Connect to the database, all goes well ...
//Run a basic query on the database
public function query($query) {
//Run a query on the database an make sure is executed successfully
try {
//$this->connection->query uses MySQLi's built-in query method, not this one
if ($result = $this->connection->query($query, MYSQLI_USE_RESULT)) {
return $result;
} else {
$error = debug_backtrace();
throw new Exception(/* A long error message is thrown here */);
}
} catch (Exception $e) {
$this->connection->close();
die($e->getMessage());
} …Run Code Online (Sandbox Code Playgroud) 所以我试图检查以下查询是否返回任何结果
$numUsersSameRatingQuery="SELECT * `user ratings` WHERE category='$category' AND categoryId='$categoryId' AND `userAromaRating`>0 ";
$result=mysql_query($numUsersSameRatingQuery);
$numResults=mysql_num_rows($result);
if($numResults==0)
{
// do the INSERT INTO
}
else
{
//do the UPDATE SET
}
Run Code Online (Sandbox Code Playgroud)
但是,上面返回以下错误,并且if($numResults)每次都执行.换句话说,我永远无法else运行该块.
这是错误
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\boozeDb\profileThis.php on line 141
Run Code Online (Sandbox Code Playgroud)
帮助表示赞赏.
我正在为我的Web应用程序创建一个登录脚本,并且我正在尝试使用它$count = mysqli_stmt_num_rows($stmt);来查找从sql select语句返回的行数,因此我可以决定是否应该启动会话.
问题是,$ count始终为0,即使我输入与我的数据库中的数据匹配的有效用户名和密码.我已经测试了select语句,它运行正常.没有给出错误,语法,SQL或其他内容,所以我对于发生什么事情感到有些困惑.
码:
<?php
$link = mysqli_connect("localhost", "****", "****", "****");
//check connection
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
// username and password sent from form
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];
// Move to MySQL(i) as MySQL is now obslete and use Prepare statment for protecting against SQL Injection in better and easier way
$stmt = mysqli_prepare($link, 'SELECT username, password FROM `users` WHERE `username` = ? AND `password` = ?');
/* bind parameters for markers …Run Code Online (Sandbox Code Playgroud) 如何查看以下查询返回的行数?
mysql_select_db($database_aoldatabase, $aoldatabase);
$query1 = "select * from sale where secid = $invoiceno ";
$query2 = "select * from sale where secid = $invoiceno ";
$maxa = mysql_query ($query1)
or die ("Query '$query' failed with error message: \"" . mysql_error () . '"');
$maxa2 = mysql_query ($query2)
or die ("Query '$query' failed with error message: \"" . mysql_error () . '"');
$row = mysql_fetch_array($maxa);
$row2 = mysql_fetch_array($maxa2);
Run Code Online (Sandbox Code Playgroud) 因为如果没有返回行,mysql_num_rows返回false,最好是这样做:
$query = mysql_query("SELECT id FROM table WHERE something = 'this'");
$result = mysql_num_rows($query);
if ($result) { }
Run Code Online (Sandbox Code Playgroud)
或者我应该这样做:
if ($result >= 1) { }
Run Code Online (Sandbox Code Playgroud) 我知道之前已经问过这个问题,但似乎解决方案已经针对所提出的问题.
我有一个包含数百个实例的代码库,其中使用了mssql_num_rows.
代码示例:
$db->execute($sql);
if ($db->getRowsAffected() > 0) {
$total = $db->fetch();
Run Code Online (Sandbox Code Playgroud)
在db类中:
$this->rowsaffected = mssql_num_rows($this->query_result);
Run Code Online (Sandbox Code Playgroud)
SELECT count(*) FROM table查询,因为我有太多特定的select语句.preg_replace删除之间的所有内容SELECT and FROM,然后用a替换COUNT(*)并运行第二个查询,但这假设所有查询都以某种方式设置.fetchAll先count()得到结果,但这意味着要升级if语句的所有实例.那么如果人们将他们的代码更新为PDO,那么替换为*_num_rows函数的最佳方法是什么呢?不是解决特定问题的东西,而是取代*_num_rows功能的东西.如果那是不可能的,那之前是什么让它成为可能呢?
mysql-num-rows ×10
php ×9
mysql ×7
mysqli ×3
oop ×2
sql ×2
laravel ×1
pdo ×1
performance ×1
session ×1
sql-server ×1
sql-update ×1