将unix_timestamp插入mysql数据库

时间:2014-04-25 07:34:05

标签: php mysql database unix-timestamp

我正在尝试在php中创建一个可以将unix_timestamp保存到mysql数据库中的函数,但我不断收到有关无效参数编号的错误消息。

这是该函数的代码:

function addNew($array){
$sql = 'INSERT INTO USER (id, acronym, name, password) 
VALUES (?, ?, ?, UNIX_TIMESTAMP());';



$id  = isset($_POST['id'])  ? $_POST['id'] : null;
$acronym   = isset($_POST['acronym'])   ? $_POST['acronym'] : null();
$name   = isset($_POST['name'])   ? strip_tags($_POST['name']) : null;
$password    = isset($_POST['password'])    ? strip_tags($_POST['password']) : null;

$params = array($id, $acronym, $name, $password);
$res=$this->db->ExecuteQuery($sql, $array);

if($res) {
$output = 'Användare skapad!';
}
else {
$output = 'Användare kunde tyvärr ej skapas.<br>';
}
return $output;
}

这是用户输入的代码:

$cont = new CUserAdmin($db);

$id  = isset($_POST['id'])  ? $_POST['id'] : null;
$acronym   = isset($_POST['acronym']) ? strip_tags($_POST['acronym']) : null;
$name   = isset($_POST['name']) ? strip_tags($_POST['name']) : null;
$password   = isset($_POST['password']) ? strip_tags($_POST['password']) : null;

$save = isset($_POST['save'])  ? true : false;

$output = null;
if($save){
$array = array($id, $acronym, $name, $salt );
$output = $cont->addNew($array);
}


// Do it and store it all in variables in the belio container.
$belio['title'] = "Ny användare";

$belio['main'] = <<<EOD
<h1>Skapa ny användare</h1>
<form method=post>
<div class="freebox">
<p><label>Acronym <br> <input type='text' name='acronym'/> </label></p>
<p><label>Name:<br> <input type='text' name='name'/> </label></p>
<p><label>Password:<br> <input type='password' name='salt' /> </label></p>
</div>
<p><input type='submit' name='save' value='Spara'/></p>
<p>{$output}</p>
</form>
EOD;

但是代码不起作用,我收到此错误消息:

  

警告:PDOStatement :: execute():SQLSTATE [HY093]:参数号无效:绑定变量数&gt;与/ home / saxon / students / 20141 / josj14 / www / webflix / belio中的令牌数不匹配/ src目录/的CDatabase   第121行的/CDatabase.php

问题似乎是UNIX_TIMESTAMP本身,当我用'?'交换它时信息将保存到数据库中。

是否可以通过这种方式将unix时间戳保存到数据库?

3 个答案:

答案 0 :(得分:0)

这与UNIX_TIMESTAMP()问题无关,您正在进行不正确的映射。您正在使用$password映射UNIX_TIMESTAMP()

您可能错过了unixdatetime列...我认为应该是这样的..

$sql = 'INSERT INTO USER (id, acronym, name, password , unixdatetime)
VALUES (?, ?, ?, ?, UNIX_TIMESTAMP());';

  

当我交换它时,问题似乎是UNIX_TIMESTAMP本身   用&#39;?&#39;信息将保存到数据库中。

当您放置?它确实有效时,因为您正确地映射了所有内容,您有四列id, acronym, name, password和四个数组参数,如此处所示.. $params = array( $id, $acronym, $name, $password );

所以你实际做的是你用$password替换UNIX_TIMESTAMP()导致无效参数编号:绑定变量数警告。

答案 1 :(得分:0)

您的SQL语句有3个占位符 但是你绑定了数组中的4个参数值 因此也是例外。

$sql = 'INSERT INTO USER ( id, acronym, name, password ) 
VALUES ( ?, ?, ?, UNIX_TIMESTAMP() );';

$params = array( $id, $acronym, $name, $password );
$res=$this->db->ExecuteQuery($sql, $array);

从数组中删除$password

示例

$sql = 'INSERT INTO USER  (id, acronym, name, password ) 
VALUES ( ?, ?, ?, UNIX_TIMESTAMP()  );';

$params = array($id, $acronym, $name );
$res=$this->db->ExecuteQuery( $sql, $array );

如果您正在从userinput读取密码值,请删除unix_timestamp()并在其中放置占位符。要保存unix_timestamp,您应该在表格中有另一列来容纳它。说date_time int unsigned。然后修改insert,如下所示:

示例

$sql = 'INSERT INTO USER  (id, acronym, name, password, date_time ) 
VALUES ( ?, ?, ?, ?, unix_timestamp() );';

$params = array($id, $acronym, $name, $password );
$res=$this->db->ExecuteQuery( $sql, $array );

答案 2 :(得分:0)

$sql = 'INSERT INTO USER (id, acronym, name, password) 
VALUES (?, ?, ?, UNIX_TIMESTAMP());';

在此处,您可以将时间戳插入密码字段

array($id, $acronym, $name, $password);

在这里输入一个额外的变量,$ password到一个不存在的参数。

$sql = 'INSERT INTO USER (id, acronym, name, password, date_created) 
VALUES (?, ?, ?, ?, UNIX_TIMESTAMP());';

可行,将date_created更改为适当的字段名称

另外你应该哈希你的密码,以纯文本形式存储是不好的做法

相关问题