有关ecshop的include\cls_mysql.php的一个改进

2016-07-07 15:03 来源:www.chinab4c.com 作者:ecshop专家

ecshop的mysql类很好使,提供的方法也很多,但是在开发过程中常用到一个autoExecute的方法,在这个方法里有一个bug,导至更新和添加数据时有时无法成功执行,主要原因是如果字段和和mysql关键字相同时mysql就会报错,原代码:

function autoExecute($table, $field_values, $mode = 'INSERT', $where = '', $querymode = '')
{
$field_names = $this->getCol('DESC ' . $table);
$sql = '';
if ($mode == 'INSERT')
{
$fields = $values = array();
foreach ($field_names AS $value)
{
if (array_key_exists($value, $field_values) == true)
{
$fields[] = '`'.$value.'`';
$values[] = "'" . $field_values[$value] . "'";
}
}
if (!empty($fields))
{
$sql = 'INSERT INTO ' . $table . ' (' . implode(', ', $fields) . ') VALUES (' . implode(', ', $values) . ')';
}
}
else
{
$sets = array();
foreach ($field_names AS $value)
{
if (array_key_exists($value, $field_values) == true)
{
$sets[] = $value . " = '" . $field_values[$value] . "'";
}
}
if (!empty($sets))
{
$sql = 'UPDATE ' . $table . ' SET ' . implode(', ', $sets) . ' WHERE ' . $where;
}
}
if ($sql)
{
return $this->query($sql, $querymode);
}
else
{
return false;
}
}

修改后的代码:
function autoExecute($table, $field_values, $mode = 'INSERT', $where = '', $querymode = '')
{
$field_names = $this->getCol('DESC ' . $table);
$sql = '';
if ($mode == 'INSERT')
{
$fields = $values = array();
foreach ($field_names AS $value)
{
if (array_key_exists($value, $field_values) == true)
{
$fields[] = '`'.$value.'`';
$values[] = "'" . $field_values[$value] . "'";
}
}
if (!empty($fields))
{
$sql = 'INSERT INTO ' . $table . ' (' . implode(', ', $fields) . ') VALUES (' . implode(', ', $values) . ')';
}
}
else
{
$sets = array();
foreach ($field_names AS $value)
{
if (array_key_exists($value, $field_values) == true)
{
$sets[] ='`'. $value . "` = '" . $field_values[$value] . "'";
}
}
if (!empty($sets))
{
$sql = 'UPDATE ' . $table . ' SET ' . implode(', ', $sets) . ' WHERE ' . $where;
}
}
if ($sql)
{
return $this->query($sql, $querymode);
}
else
{
return false;
}
}

主要把段名两边加了个'`'符号,运行起来更安全了

回答:
支持共享

有试到成功的吗?

细节 决定成败!!
我也觉得ec很多时候 扩展性不是很好!

它是开源的,可以加上很多补丁。