嘿,伙计们,对不起,但我的英语不太好。我在执行删除表方法时遇到了一个问题。当我进行var_dump()
查询时,它给了我一个正确的查询,如下所示:
public 'queryString' => string 'DELETE FROM `test` WHERE `id` = ? LIMIT 1' .
在执行之前,我检查了所有步骤,所有步骤都返回了正确的查询。当我执行时,我得到了这样的错误:
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test.test' doesn't exist
这是我的代码:
use PDO;
use PDOException;
class Delete extends Query
{
public $where = array();
public $params = array();
public $limit = 1;
private function fieldClause($field)
{
return $filed = "`$field`";
}
public function where($field, $operation, $value)
{
$field = $this->fieldClause($field);
$this->where = " $field $operation ?";
$this->params[] = $value;
return $this;
}
public function limit($limit)
{
$this->limit = $limit;
return $this;
}
private function buildSql()
{
$sql = "DELETE FROM $this->table";
$sql .= " WHERE $this->where";
$sql .= " LIMIT $this->limit";
var_dump($sql);
return $sql;
}
protected function runSQL($debug = false)
{
$sql = $this->buildSql();
if ($debug) {
Log::query($sql, $this->params);
}
$this->dbh->beginTransaction();
try {
$query = $this->dbh->prepare($sql);
var_dump($this->params);
foreach ($this->params as $key => $val) {
$type = is_null($val) ? PDO::PARAM_NUL : PDO::PARAM_STR;
$type = is_bool($val) ? PDO::PARAM_BOOL : PDO::PARAM_STR;
$type = is_integer($val) ? PDO::PARAM_INT : PDO::PARAM_STR;
$query->bindValue($key+1, $val, $type);
var_dump($query);
}
$query->execute();
return $query;
} catch (PDOException $e) {
$this->dbh->rollBack();
Log::error($e);
}
}
}
在这里我运行这个方法:
require_once 'autoload.php';
$db = new 'DBWork'DBWork();
$del = $db->delete('test')->where('id', '=', 3);
$del->deleteOne(true);
错误很容易解释:表不存在。使用的格式如下:
database-name.table-name
因此,您当前的数据库(使用查询USE databaseName
选择一个数据库)是"test",而您试图删除的表是"test",因此表示法为"test.test"