在你问之前,我已经使用了堆栈溢出和google的搜索功能!
在我的代码中,mysqli_insert_id总是返回0。
在我的'Model'-PHP-Class中,我的保存功能如下所示:
this.form = new FormGroup({
firstName: new FormControl('', [Validators.required, validateName]),
lastName: new FormControl('', [Validators.required, validateName]),
email: new FormControl('', [Validators.required, validateEmail]),
dob: new FormControl('', [Validators.required, validateDate])
});
我的班级DB看起来像这样:
$result = DB::q($sql);
if(!$result)
{
throw new Exception("Error:".mysqli_error(DB::getDB()));
}
else
{
if(is_null($this->id))
{
$this->id = DB::insert_id();
}
}
$this->update();
当我直接在同一数据库中的服务器上执行多查询时,它将正常工作:
class DB
{
public static $db = null;
public static function q($sql)
{
self::checkDB();
if(!isset($sql) OR $sql == null OR $sql == "")
{
throw new Exception("\$sql may not be empty");
}
else
{
$result = mysqli_query(self::$db, $sql);
if(!$result)
{
error_log($sql);
throw new Exception(mysqli_error(self::$db));
die();
}
return new DBResult($result);
}
}
public static function checkDB()
{
if(is_null(self::$db))
{
self::$db = mysqli_connect(DB_PORT, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
if(!self::$db)
{
throw new Exception(mysqli_error(self::db));
}
}
}
public static function insert_id()
{
return mysqli_insert_id(self::$db);
}
}
class DBResult
{
private $result = null;
public function __construct($result)
{
$this->result = $result;
}
public function fetch_assoc()
{
return mysqli_fetch_assoc($this->result);
}
public function fetch_object()
{
return mysqli_fetch_object($this->result);
}
public function __get($willget)
{
if($willget == "num_rows")
{
return mysqli_num_rows($this->result);
}
else
{
return $this->result;
}
}
}
我还在INSERT INTO users (name, age) VALUES ('personA', 42); SELECT last_insert_id() as k;
列上设置了AUTO_INCREMENT
标记。
此外,我的代码中似乎没有任何地方可以覆盖id
类中的$db
。
非常感谢你的帮助!
答案 0 :(得分:-1)
问题: 在Model Class中有这段代码:
if(is_null($this->id))
{
$this->id = DB::insert_id();
}
出于某种原因,我不知道为什么,$this->id
不是空的。取而代之的是0。
所以我所要做的就是将其改为
if(empty($this->id))
{
$this->id = DB::insert_id();
}
感谢@Syscall。你帮我调试了这段代码。抱歉这个问题,但我想你们有些人都知道。整天编程,但作为一种爱好没有任何作用。