2010-02-09 32 views
5

Duplicar posibles:
mysql_fetch_array() expects parameter 1 to be resource, boolean given in selectMysqli lanza "Advertencia: mysqli_stmt_bind_param() espera parámetro de 1 a ser mysqli_stmt, boolean given"

sé que este código funciona en otro sitio I' Tengo pero no está jugando a la pelota hoy. consigo tres advertencias:

Advertencia: mysqli_stmt_bind_param() espera parámetro 1 que se mysqli_stmt, boolean da en /homepages/14/d248783986/htdocs/subdomains/clients.bionic-comms.co.uk/httpdocs/ despreocupado/process.php en la línea 33

Advertencia: mysqli_execute() espera parámetro 1 para ser mysqli_stmt, boolean da en /homepages/14/d248783986/htdocs/subdomains/clients.bionic-comms.co.uk/httpdocs/ carefree/process.php en la línea 34

Advertencia: mysqli_stmt_affected_rows() espera que el parámetro 1 sea mysqli_stmt, boolean en/homepages/14/d248783986/htdocs/subd omains/clients.bionic-comms.co.uk/httpdocs/carefree/process.php en la línea 35

¿Alguien me puede ayudar a resolver esto?

Estoy teniendo que usar htaccess para actualizar a PHP5 si esto ayuda.

$connection = mysqli_connect($hostname, $username, $password, $dbname); 

if (!$connection) { 
    die('Connect Error: ' . mysqli_connect_error()); 
} 

$query = "INSERT INTO entries (name, dob, school, postcode, date) VALUES (?,?,?,?,?)"; 
$stmt1 = mysqli_prepare($connection, $query); 
mysqli_stmt_bind_param($stmt1, 'sssss',$name,$dob,$school,$postcode,$date); 
mysqli_execute($stmt1); 
if(mysqli_stmt_affected_rows($stmt1) != 1) 
    die("issues"); 
mysqli_stmt_close($stmt1); 
return "new"; 

EDITAR

Después de algunas investigaciones resulta que la preparación de sentencias no jugar a la pelota con MySQL4. He creado una nueva base de datos mysql5 pero ahora me sale este error cuando intento conectar: ​​

Advertencia: mysqli_connect() [function.mysqli a conectar]: (HY000/2005): host del servidor MySQL Desconocido 'localhost : /tmp/mysql5.sock '(1)

¿Alguien tiene alguna idea de por qué sucede esto?

+0

Exactamente ¿qué te pasa como $ nombre de host a Mysqli \_¿conectar? 'var_dump ($ hostname); $ connection = mysqli_connect (... ' – VolkerK

+0

localhost: /tmp/mysql5.sock – Drew

+0

Pruébalo con' $ hostname = NULL; $ connection = mysqli_connect (... ' – VolkerK

Respuesta

3

El problema proviene del mysqli_prepare(), que en su caso devuelve false, de ahí el error 'boolean given'. Como su consulta parece correcta, el error debe estar en $connection. ¿Estás seguro de que la conexión funciona y está definida?

la conexión debe ser definido como algo parecido a esto:

$connection = mysqli_connect("localhost", "my_user", "my_password", "world"); 

Si la conexión se define correctamente, puede utilizar echo mysqli_connect_error() para ver si algo ha ido mal. ¿Dijo que el código funciona en otro sitio, por lo que quizás olvidó cambiar las credenciales o el host?

+0

Gracias por el consejo. Desafortunadamente no recibo nada del mysqli_connect_error(). – Drew

6

Añade más errores al manejar.
Cuando la conexión falla, mysqli_connect_error() puede darle más detalles.
Al preparar la instrucción falla, mysqli_error() tiene más información sobre el error.
Cuando se ejecuta la instrucción falla, pregunte mysqli_stmt_error(). Y así sucesivamente ...
Cada vez que una función/método del módulo mysqli devuelve falso para indicar un error, a) maneja ese error yb) decide si tiene sentido o no continuar. P.ej. no tiene sentido continuar con las operaciones de la base de datos cuando falla la conexión. Pero puede tener sentido continuar insertando datos cuando solo una inserción falló (puede tener sentido, puede que no).

Para el ensayo se puede usar algo como esto:

$connection = mysqli_connect(...); 
if (!$connection) { 
    die('connect error: '.mysqli_connect_error()); 
} 

$query = "INSERT INTO entries (name, dob, school, postcode, date) VALUES (?,?,?,?,?)"; 
$stmt1 = mysqli_prepare($connection, $query); 
if (!$stmt1) { 
    die('mysqli error: '.mysqli_error($connection); 
} 
mysqli_stmt_bind_param($stmt1, 'sssss',$name,$dob,$school,$postcode,$date); 
if (!mysqli_execute($stmt1)) { 
    die('stmt error: '.mysqli_stmt_error($stmt1)); 
} 
... 

Para un entorno de producción real de este enfoque es comunicativo y muere de manera fácil ;-)

+0

el problema fue con la declaración de preparación, por lo que hemos actualizado el problema anterior. Gracias – Drew

Cuestiones relacionadas