我想更新表...通过执行查询表确实得到更新但我也得到错误消息。
我如何解决此问题..如果更新了行,则获取成功消息,否则出错。
$sql='UPDATE user SET email='.db_input($_POST['email'])
.' WHERE uname='.db_input($thisuser->getUserName());
if(db_query($sql)&& db_affected_rows()){
$msg='Profile Updated Successfully';
}else{
$errors['err']='Error(s) occured. Profile NOT updated';
}
由于
function db_query($ query, $数据库= “”,$康恩= “”){ 全球$ cfg; 提供if($ conn){/ *连接* / $响应=($数据库)mysql_db_query($数据库,$查询,$康恩):的mysql_query($查询,$ conn);在? }其他{ $响应=($数据库)mysql_db_query($数据库,$查询):的mysql_query($查询);? }
if(!$response) { //error reporting $alert='['.$query.']'."\n\n".db_error(); Sys::log(LOG_ALERT,'DB Error #'.db_errno(),$alert,($cfg &&
$ CFG-> alertONSQLError())); echo $ msg;在debuging或dev期间#uncomment。 } 返回$ response; }
function db_affected_rows(){ return mysql_affected_rows(); }
答案 0 :(得分:1)
您的代码段看起来不错。
但请注意,如果您将用户电子邮件地址更改为相同的值,则SQL查询将执行正常,但由于优化原因,MySQL将不会更新记录,因此db_query()将返回{ {1}},但db_affected_rows()将返回false。您需要确定这是否是您的预期行为。
答案 1 :(得分:0)
你应该正确使用drupal的API,而不是直接调用函数,你也应该用{}包装表来支持表前缀。
$sql= "UPDATE {user} SET email='%s' WHERE uname='%s';"
if(db_query($sql, $_POST['email'], thisuser->getUserName())&& db_affected_rows()){
..
}
另一件事是,如果这是以表单形式完成的,那么您应该使用表单API并使用submit validater来运行此代码。另外Drupal没有user
表但是它有users
以避免混淆,您可能想要重命名自定义表。如果你想更新一个drupal用户帐户,你应该这样做。
function my_form($form_state) {
$form['email'] = array(
'#type' => 'textfield',
'#title' => t('Title'),
'#description' => t('The title you enter here appears on the page.'),
);
return $form;
}
function my_form_validate(&$form, &$form_state) {
$mail = $form_state['values']['email'];
// Validate the email, user form_set_error(), to raise error
}
function my_form_submit(&$form, &$form_state) {
$mail = $form_state['values']['email'];
global $user;
$sql= "UPDATE {users} SET mail='%s' WHERE name='%s';"
if(db_query($sql, $mail, $user->name) && db_affected_rows()) {
drupal_set_message(t('Update successful'));
}
else {
..
}
}