2012-07-24 64 views
0

所以我正在研究一些代码,它将一段文本和一个id插入到表中。我发送代码的文本和用户的名字。我想获取用户名,并从users表中选择与其对应的ID。然后我将它插入到文本表格中。从数组插入值

我已经试过这样:

$id = mysql_query("SELECT users.id FROM users WHERE name='$username'"); 

mysql_query("INSERT INTO `shouts` (`id`, `user`, `text`, `datetime`) VALUES (NULL, '$id', '$text', '$datetime');"); 

但它不工作,因为变量$id保存SQL数据。我如何将数据转换为整数?

+2

好吧......你试过了...... _then_发生了什么? – Neal 2012-07-24 19:24:54

+0

你是什么意思,它存储SQL数据?你可以添加一个什么样的内容? – andrewsi 2012-07-24 19:27:56

回答

0

尝试$id = addslashes($id);或编码的SQL字符串

+0

哦,对不起。我的印象是你正试图将一个sql字符串保存到表中。伙计们是正确的,首先从用户表中获取结果,然后将其保存为json编码或序列化 – 2012-07-24 19:29:46

+0

如果只有一个字段需要来自用户表,例如id,那么您不需要序列化。 – 2012-07-24 19:30:48

0

的$ id

的任何其他方法是要包含你的结果,你需要获取ID并将它放入一个变量。检查出mysql_fetch_row函数,我认为这会得到你想要的。 mysql_fetch_row syntax

+0

谢谢!得到它的工作。 – 2012-07-24 19:32:26

0

mysql_query永远不会返回一个正常变量,只会返回一个结果资源。尝试使用mysql_fetch_assoc从选择查询中获取数据。另外,MySQL php的扩展名已被弃用,我们鼓励您迁移到MySQLi或PDO。

3

manual

返回的结果资源应该传递给mysql_fetch_array(),用于处理结果表 等 功能,访问返回的数据。

从手动

另外:

这个扩展的使用气馁。应该使用MySQLi或PDO_MySQL 扩展 。

要回答你的问题,试试这个:

$id = mysql_query("SELECT users.id FROM users WHERE name='$username'"); 
$id = mysql_fetch_assoc($id); 
mysql_query("INSERT INTO `shouts` (`id`, `user`, `text`, `datetime`) VALUES (NULL, '". $id['id']."', '$text', '$datetime');"); 

虽然这是一个坏主意™,你真的应该考虑使用PDO。这真的不那么难。它将为您提供准备SQL语句的能力,让您在夜晚更容易入睡,并知道您不会成为SQL注入的受害者。你所拥有的代码至多是不明确的,无论你自己是否已成为受害者。

+0

另请参见[防止SQL注入指南](http://bobby-tables.com/php.html)。虽然这很好,但你已经做了一个笔记,你真的不应该在这里发布代码,这是非常鲁莽的。 – tadman 2012-07-24 19:41:28

0

这应该工作

$sql = mysql_query("SELECT users.id FROM users WHERE name='$username'"); 
    $id = mysql_fetch_array($sql)['id'];