PHP和MySQL SELECT问题

时间:2010-04-26 13:46:35

标签: php mysql

尝试检查登录用户是否已将name存储在数据库中。 name是用户输入的一组动态数组,用于输入用户添加的一组动态表单字段。有人可以告诉我如何检查并查看登录用户是否已输入该名称?我知道我的代码不对。谢谢!

MySQL代码。

SELECT * 
FROM names 
WHERE name = '" . $_POST['name'] . "' 
AND userID = '$userID'

这是MySQL表。

CREATE TABLE names (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
userID INT NOT NULL,
name VARCHAR(255) NOT NULL,
meaning VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
);

3 个答案:

答案 0 :(得分:2)

如果$ _POST ['name']实际上是一个字符串数组,正如你所说,那就试试这个PHP:

$namesString = '';
foreach ($i=0; $i < count($_POST['name']) $i++)
{
    $namesString .= "'" . mysql_real_escape_string($_POST['name'][$i]) . "'";
    if(isset($_POST['name'][$i + 1]) $nameString .= ', ';
}

使用此查询:

 SELECT * FROM `names` 
 WHERE `name` IN ( $namesString )
    AND `userID` = '$userID'

查询将返回名称与$ _POST ['name']中的字符串相同的所有行。

答案 1 :(得分:1)

首先,如果userID字段是唯一的,则应在表格中添加唯一索引。

另外,请注意SQL injection attacks

使用这样的东西更加安全:

$sqlQuery = sprintf('SELECT COUNT(id) AS "found" FROM names WHERE userID = "%s"', mysql_real_escape_string($_POST['name'], $conn));

此SQL查询将返回1行,其中包含1个字段(名为found),它将返回匹配行数(如果没有,则返回0)。如果您只想检查userID是否存在(这不需要为此获取所有数据),这是完美的。

至于动态数组,你必须发布更多信息,我会更新我的答案。

同时这里有一些有用的PHP函数可以帮助你做你想做的事情:

对于MySQL查询:

对于您的用户列表:

答案 2 :(得分:0)

如你所说,我很确定代码完全符合您的要求。 SELECT应该返回响应发送的名称和当前用户ID的记录。

如果你需要一些PHP代码,这里(应该改进):

$result = mysql_query('YOUR SELECT HERE'); 
if (!$result) {
   die('ERROR MESSAGE');
} else {
   $row = mysql_fetch_assoc($result)); 
   // $row is an associative array whose keys are the columns of your select.
}

请记住逃避$ _POST。