我不太确定如何在类中使用mysqli,因为我习惯于程序编程,但我知道OOP在哪里是有益的。所以我正在尝试使用mysqli在我的类中创建一个更新函数,但它似乎没有工作。我也无法弄清楚如何让它来回应错误。它告诉我这个:
mysqli_error()期望参数1为mysqli
这是对象:
$mysqli = new mysqli('localhost', 'root', '', 'ams');
$part = new Part($mysqli);
这是我的班级:
class Part {
protected $mysqli;
// Editable Part table titles
protected $editable = array('Desc', 'SDQty', 'IAQty', 'IsActive');
function __construct($mysqli) {
$this->mysqli = $mysqli;
}
function update($data = array(), $partID) {
$r_errors = 0;
// Data Arrays
$updateArray = array();
// Loop Though all the column titles
foreach ( $data as $column => $value ) {
// If the column value is set
if ( ( isset($column) && !empty($column) ) && ( isset($value) && !empty($value) ) ) {
// If the item to be updated is allowable from the allowable array || add it to the column array
if ( in_array($column, $this->editable) ) {
$updateArray[] = "$column = $value";
}
}
} // End of foreach loop
// Convert Data Arrays to strings
$updateData = implode(', ', $updateArray);
// Create the SQL string
$_query = "UPDATE parts WHERE PartID = $partID SET $updateData";
$result = $this->mysqli->query($_query);
if ( !$result ) {
echo mysqli_error($result);
}
}
它不会运行查询,我在这个OOP的初学者使用php和mysql所以任何帮助都非常感谢。
答案 0 :(得分:3)
您的查询错误,而不是:
UPDATE parts WHERE PartID = $partID SET $updateData;
应该是(请注意事项的顺序):
UPDATE parts SET column_name = 'column_data' WHERE PartID = $partID;
请查看UPDATE Syntax了解详情。
关于错误:
mysqli_error()期望参数1为mysqli
由于$mysqli
是保存mysqli的变量,因此应该使用该变量:
echo mysqli_error($mysqli);
注意:我不知道此数据的来源,但如果是用户输入,您一定要查看How can I prevent SQL-injection in PHP?
答案 1 :(得分:2)
第echo mysqli_error($result);
行不正确。您正在尝试将结果集作为参数传递。
你应该拥有的是什么;
echo $mysqli->error();
保持正确的OO语法。
您可以拥有mysqli_error($mysqli)
,但这是程序语法。