【发布时间】:2015-03-13 09:41:39
【问题描述】:
我目前无法将数据插入我的数据库。我有这段代码可以开始插入查询:
if (Input::exists()) {
$validate = new Validate();
$link = new Link();
$validation = $validate->check($_POST, array(
'name' => array(
'related' => 'hyperlink'
),
'hyperlink' => array(
'related' => 'name'
)
));
if ($validation->passed()) {
try {
$link->create(array(
'uid' => $user->data()->id,
'name' => Input::get('name'),
'hyperlink' => Input::get('hyperlink')
));
} catch (PDOException $e) {
die($e->getMessage());
}
} else {
echo '<div class="error">';
echo '<ol>';
foreach ($validation->errors() as $error) {
echo '<li>' . $error . '</li>';
}
echo '</div>';
echo '</ol>';
}
}
运行这段代码时,会调用create方法:
public function create($fields = array()) {
if (!$this->_db->insert('user_links', $fields)) {
echo 'Something went wrong';
}
}
现在脚本将运行插入方法:
public function insert($table, $fields = array()) {
if (count($fields)) {
$value_list = implode(", ", array_values($fields));
$keys = array_keys($fields);
$sql = "INSERT INTO `$table` (`" . implode('`, `', $keys) . "`) VALUES ({$value_list})";
if (!$this->query($sql, $fields)->error()) {
return true;
}
}
return false;
}
一切都很好,但是当它进入 query() 方法时,它似乎保存了 2 个查询。我已经听说过__destruct,所以我想知道它是否与此有关。
查询方法如下:
public function query($sql, $params = array()) {
$this->_error = false;
echo $sql;
if ($this->_query = $this->_pdo->prepare($sql)) {
$x = 1;
if (count($params)) {
foreach ($params as $param) {
$this->_query->bindValue($x, $param);
$x++;
}
}
if ($this->_query->execute()) {
$this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ);
$this->_count = $this->_query->rowCount();
} else {
$this->_error = true;
}
}
return $this;
}
当我在 query() 方法中回显 $sql 时,它回显如下:
SELECT * FROM users WHERE id = ?INSERT INTO user_links (uid,name,hyperlink) VALUES (1, test, test)
SELECT * FROM users WHERE id = ? 来自 get() 方法。但是在我为查询设置所有数据的代码中,我没有使用任何 get() 方法。除非获取输入字段的值。 (但这不是问题)
感谢您的帮助!
编辑 1:
选择方法:
public function get($table, $where) {
return $this->action('SELECT *', $table, $where);
}
编辑 2:
public function find($user = null) {
if ($user) {
$field = (is_numeric($user)) ? 'id' : 'email';
$data = $this->_db->get('users', array($field, '=', $user));
if ($data->count()) {
$this->_data = $data->first();
return true;
}
}
}
编辑 3:
public function action($action, $table, $where = array()) {
if (count($where) === 3) {
$operators = array('=', '>', '<', '>=', '<=', '<>');
$field = $where[0];
$operator = $where[1];
$value = $where[2];
if (in_array($operator, $operators)) {
$sql = "{$action} FROM {$table} WHERE {$field} {$operator} ?";
if (!$this->query($sql, array($value))->error()) {
return $this;
}
}
}
return false;
}
【问题讨论】:
-
假设你在 laravel 上?指定你的框架
-
纯 php,无框架。
-
向你展示
select或get类的get方法,我敢打赌你必须通过一些其他查询来获取当前用户 -
完成,我编辑了我的帖子
-
是我遗漏了什么还是您没有正确准备插入语句?看起来您将值直接放入插入字符串中