Я написал две простые функции, которые дают ту же функциональность, что и $stmt->get_result();
, но они не требуют драйвера mysqlnd.
Вы просто замените
$result = $stmt->get_result();
на $fields = bindAll($stmt);
и
$row= $stmt->get_result();
с $row = fetchRowAssoc($stmt, $fields);
.
(Чтобы получить числа возвращаемых строк, вы можете использовать $stmt->num_rows
.)
Вам просто нужно разместить эти две функции, которые я написал где-то в вашем PHP-скрипте. (например, справа внизу)
function bindAll($stmt) {
$meta = $stmt->result_metadata();
$fields = array();
$fieldRefs = array();
while ($field = $meta->fetch_field())
{
$fields[$field->name] = "";
$fieldRefs[] = &$fields[$field->name];
}
call_user_func_array(array($stmt, 'bind_result'), $fieldRefs);
$stmt->store_result();
//var_dump($fields);
return $fields;
}
function fetchRowAssoc($stmt, &$fields) {
if ($stmt->fetch()) {
return $fields;
}
return false;
}
Как это работает :
В моем коде используется функция $stmt->result_metadata();
, чтобы выяснить, сколько и какие поля возвращаются, а затем автоматически привязывает полученные результаты к предварительно созданным ссылкам. Работает как очарование!
Ищем исходный код django ...
class CommaSeparatedIntegerField(CharField):
def formfield(self, **kwargs):
defaults = {
'form_class': forms.RegexField,
'regex': '^[\d,]+$',
'max_length': self.max_length,
'error_messages': {
'invalid': _(u'Enter only digits separated by commas.'),
}
}
defaults.update(kwargs)
return super(CommaSeparatedIntegerField, self).formfield(**defaults)
Взглянем на этот валидатор регулярных выражений. Похоже, что пока вы дадите ему список целых чисел и запятых, django не будет жаловаться.
Вы можете определить его как поле ввода:
class Foo(models.Model):
int_list = models.CommaSeparatedIntegerField(max_length=200)
И заполнить его так:
f = Foo(int_list="1,2,3,4,5")
Я как раз имел дело с CommaSeparatedIntegerField в моем последнем проекте. Я использовал MySQL, и казалось, что предоставление строки целочисленных значений, разделенных запятыми, очень удобно для БД, например, «1,2,3,4,5». Если вы хотите оставить это поле пустым, просто передайте пустую строку.
Он действительно действует как CharField и выглядит для меня странным образом ... Я получил такие значения, как "[1, 2, 3, 4, 5] "включая скобки в моей базе данных! Так что берегись!