2012-07-10 30 views
0

某些代码从选择数据开始,然后检查行号是否为0,然后继续正常过程。问题是正常的过程取决于select语句,因为它存储在insert之前,所以不存在。如何在不使用ajax或与html相关的任何内容的情况下刷新PHP中的数据请求?下面是一个例子来解释:PHP mysql刷新选择数据

$user = $_GET['user']; // not stored user 
$select = mysql_query("SELECT * FROM `table` WHERE username = ".$user); 
$row = mysql_fetch_array($select); 
$rownum = mysql_num_rows($select); 
if(!$rownum){ 
    mysql_query("INSERT INTO table (username, something) VALUES ('$user', 1)"); 
} 

/* Here comes the problem */ 
if($row['something'] == 0){ 
    die("Not found !"); // THIS if returns true since it was not found at first place before inserting 
         // i want it to refresh the $select data so it could be read as 1 

} 

我如何解决它到目前为止是通过重复使用下面的insert声明

if(!$rownum){ 
    mysql_query("INSERT INTO table (username, something) VALUES ('$user', 1)"); 
} 
$select = mysql_query("SELECT * FROM `table` WHERE username = ".$user); 
$row = mysql_fetch_array($select); 
    [..] 

我希望有一个简单的方法来做到这一点

+0

您可以创建一个函数'GetData()'并在其中移动'select'并调用该函数。你需要运行'select'查询来在'insert'之后获取数据。 – 2012-07-10 15:39:17

+0

@rs。是的,我知道,但我正在寻找最简单的方法来做到这一点 – Osa 2012-07-10 15:40:07

+0

示例代码容易受到[SQL注入](http://unixwiz.net/techtips/sql-injection.html),这是一个非常严重[安全风险](http://bobby-tables.com/)。为了解决这个问题,从过时的mysql扩展名切换到[PDO](http://php.net/PDO)并使用[prepared statements](http://www.php.net/PDO.prepared-statements),将值作为参数传递给语句,而不是直接将它们插入到字符串中。如果您需要PDO教程,请尝试[“用PHP和PDO编写MySQL脚本”](http://www.kitebird.com/articles/php-pdo.html)。您保存的网站可能只是您自己的网站。 – outis 2012-07-10 15:46:23

回答

1
$select$row代码

如果你知道新创建的记录是什么,你可以创建一个新的数组$ row = array('username' - >'bob',...);

但是如果你在表中有默认值,或者稍后添加其他东西,你将不得不做第二次选择。

$user=urldecode($_GET['user']); 
$result=mysql_query("SELECT * FROM `table` WHERE username='".mysql_real_escape_string($user)."'"); 
if(!$result) die("SQL ERROR"); 

if(mysql_num_rows($result)>0) 
{ 
    $row = mysql_fetch_array($select); 
} 
else 
{ 
    mysql_query("INSERT INTO table (username, something) VALUES ('".mysql_real_escape_string($user)."', 1)"); 

    $result=mysql_query("SELECT * FROM `table` WHERE username='".mysql_real_escape_string($user)."'"); 
    if(!$result) die("SQL ERROR"); 
    if(mysql_num_rows($result)==0) die("MAJOR ERRORS IN SQL"); 

    $row = mysql_fetch_array($result); 
} 

我更喜欢使用$ result,因为这是您运行查询的结果。

+0

回滚到mysql_query,因为这是OP当前使用的系统 – Waygood 2012-07-17 11:03:33